我读了很多关于这件事的问题,但到目前为止没有一个能帮到我。我目前正在使用Pythonclick
库作为命令执行脚本。
我试图执行的当前命令被放在一个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
有两个这样的导入。。。__init__.py
为空。
from .foo_two.foo_two import AClass, AnotherClass, OtherClass
from .foo_three.foo_three import AnotherClassMore
更新:在调用python -m myproject
时更正前一个命令中的语法错误会给我一个ModuleNotFoundError
,因为模块不是我的职责,它基本上是项目中使用的库。
正确的语法是
这应该在顶级包中执行
__main__
。您需要在每个带有python代码的子文件夹中都有
__init__.py
,以告诉解释器将该文件夹视为一个模块__init__.py
告诉解释器将子文件夹视为python模块/包,您应该能够导入__init__.py
文件可以为空,但需要存在于子文件夹中才能导入该模块/包希望,这将是有价值的人在那里-我通过半打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
将包添加到路径:相关问题 更多 >
编程相关推荐