我一直在阅读与此事相关的大量问题,但到目前为止,没有一个对我有帮助。我目前正在使用 Python click
库将脚本作为命令执行。
我正在尝试执行的当前命令被放置在一个 Python 包中,它有一个 __main__.py
文件,就像父目录一样。当前的项目结构如下。
/myproject
/foo_one
__init__.py
foo_one.py
/foo_two
__init__.py
foo_two.py
/foo_three
__init__.py
foo_three.py
/foo_four
__init__.py
foo_four.py
/foo_five
__init__.py
foo_five.py
/foo_six
__init__.py
foo_six.py
__init__.py
__main__.py
foo_seven.py
每当我尝试运行位于项目文件夹中的 __main__.py
脚本时,都会出现以下错误。
ModuleNotFoundError: No module named '__main__.foo_two'; '__main__' is not a package
但是,如果我尝试使用 -m
选项从上面的文件夹执行相同的脚本 python3 myproject -m
,将显示以下内容。
ImportError: attempted relative import with no known parent package
__main__.py
有 2 个这样的导入… __init__.py
是空的。
from .foo_two.foo_two import AClass, AnotherClass, OtherClass
from .foo_three.foo_three import AnotherClassMore
更新:更正上一个命令中的语法错误,同时调用 python -m myproject
给我一个 ModuleNotFoundError
因为一个模块不是我的责任,它基本上是一个库,用于该项目。
原文由 Lenny D. 发布,翻译遵循 CC BY-SA 4.0 许可协议
希望这对外面的人有价值——我浏览了六个 stackoverflow 帖子,试图找出与上面发布的内容类似的相对导入。我按照建议设置了所有内容,但我仍在点击
ModuleNotFoundError: No module named 'my_module_name'
因为我只是在本地开发和玩耍,所以我没有创建/运行
setup.py
文件。我也显然没有设置我的PYTHONPATH
。我意识到当我像以前一样运行我的代码时,当测试与模块位于同一目录时,我找不到我的模块:
但是,当我明确指定路径时,事情开始起作用:
因此,如果有人尝试了一些建议,认为他们的代码结构正确并且仍然发现自己处于与我相似的情况,请尝试以下任一方法,如果您不只是将导出当前目录添加到您的 PYTHONPATH:
$ PYTHONPATH=. python3 test/my_module/module_test.py
PYTHONPATH=.
,创建一个setup.py
包含如下内容的文件并运行python setup.py development
以将包添加到路径: