Импортировать ошибки с python -m, но не при прямом запуске - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь правильно связать мое основное приложение 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
...