Во-первых, я предполагаю, что вы понимаете, что вы написали, приведет к циклической проблеме импорта, потому что foo import bar и наоборот; попробуйте добавить
from foo import bar
to test.py, и вы увидите, что он не работает. Пример должен быть изменен для работы.
Итак, в действительности вы запрашиваете возврат к абсолютному импорту при сбое относительного импорта; на самом деле, если вы выполняете foo.py или bar.py в качестве основного модуля, остальные модули просто лежат на корневом уровне, и если они поделятся именем с другим модулем в системе, от которого будет выбран один, зависит порядок в sys.path. Поскольку текущий каталог обычно является первым, локальные модули будут выбраны, если они доступны, то есть, если у вас есть файл os.py в текущем рабочем каталоге, он будет выбран вместо встроенного.
Возможное предложение:
foo.py
try:
from . import bar
except ValueError:
import bar
if __name__ == "__main__":
pass
bar.py:
if __name__ == "__main__":
pass
Кстати, вызов сценариев из правильной позиции обычно способ лучше.
python -m foo.bar
Вероятно, это лучший путь. Этот запускает модуль как скрипт .