Я понимаю, что это старый вопрос, но я чувствую, что принятый ответ, вероятно, пропускает главную проблему с кодом спрашивающего.Строго говоря, это не так, но дает предположение, что только по совпадению можно обойти реальную проблему.
Эта реальная проблема заключается в том, что файл foobar.py
в top\foo\bar
запускается как скрипт.При попытке (правильного!) Относительного импорта происходит сбой, поскольку интерпретатор Python не понимает структуру пакета.
Лучшее решение для этого - запустить foobar.py
не по имени файла, а вместо этого использоватьфлаг -m
интерпретатору указывает ему запустить модуль top.foo.bar.foobar
.Таким образом, Python будет знать, что основной модуль, в котором он загружается, находится в пакете, и он будет точно знать, куда ссылается относительный импорт.