使用python -m导入错误,但直接运行时不导入

时间:2019-01-03 22:24:38

标签: python python-3.x python-module

我正在尝试将我的基本Flask应用与setup.py正确捆绑在一起,以便在Python 3.6.6上与gunicornuwsgi一起运行。

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 mygamepython __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时,我得到的是相同的东西:

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

0 个答案:

没有答案