Точка входа main () внутреннего файла модуля python3 - PullRequest
0 голосов
/ 28 декабря 2018

Я создал модуль с именем myutils.Это структура файла, которую я использую:

./mypackages
./mypackages/myutils
./mypackages/myutils/util1.py
./mypackages/myutils/util2.py
./myexecs
./myexecs/user_executable1.py

Я правильно установил PYTHONPATH=./

в ./myexecs/user_executable1.py Я могу легко использовать утилиты:

from my_packages import myutils
myutils.util1.func1()

Вutil1.py Я могу использовать util2.py:

from . import util2
util2.func2() 

Проблема возникает, когда я хочу использовать util1.py непосредственно в качестве основной точки входа.У него есть точка входа

if __name__ == "__main__": main()

, но если я просто выполню ее напрямую, она не сможет импортировать util2 (from . import util1 не удастся).

Она успешно выполнитсяесли я выполню его, используя python -m mypackages.myutils.util1

Есть идеи, как заставить util1 импортировать его сибилинги, используя from . import ..., и при этом иметь возможность выполнять его непосредственно из cmd, не выполняя его как модуль?

1 Ответ

0 голосов
/ 28 декабря 2018

Просто используйте абсолютный импорт везде в вашем коде (from . import util2 будет from mypackages.myutils import util2) и запустите ваш exec с python -m myexecs.user_executable1, и вы будете хороши

...