Я пытаюсь правильно связать мое основное приложение Flask с setup.py
для работы с gunicorn
или uwsgi
на Python 3.6.6.
mygame/games/board.py
mygame/games/game.py
mygame/games/__init__.py
mygame/__init__.py
setup.py
Если я запускаю __init__.py
из каталога mygame
все работает нормально.
Если я попытаюсь запустить с использованием python -m mygame
, произойдет сбой со следующей ошибкой:
Traceback (most recent call last):
File "/usr/lib64/python3.6/runpy.py", line 183, in _run_module_as_main
mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
File "/usr/lib64/python3.6/runpy.py", line 142, in _get_module_details
return _get_module_details(pkg_main_name, error)
File "/usr/lib64/python3.6/runpy.py", line 109, in _get_module_details
__import__(pkg_name)
File "mygame/__init__.py", line 14, in <module>
from games.errors import GameCommandError
ModuleNotFoundError: No module named 'games'
Что здесь происходит?
Какую схему импорта следует использовать, если я хочу, чтобы и python -m mygame
, и python __init__.py
работали?
Если я изменил импорт в __init__.py
, чтобы он был явно относительным (.games.foo
)Я получаю это, когда я запускаю python -m mygame
:
No module named mygame.__main__; 'mygame' is a package and cannot be directly executed
и когда я запускаю __init__.py
, я получаю ту же самую (ish) вещь:
Traceback (most recent call last):
File "__init__.py", line 14, in <module>
from .games.errors import GameCommandError
ModuleNotFoundError: No module named '__main__.games'; '__main__' is not a package