我有一个像这样的文件结构:
- __init__.py
- module.py
+ subpackage
|--- __init__.py
|--- submodule1.py
|--- submodule2.py
|--- etc
为此,我正在使用相对导入。例如,在submodule1.py中:
from .submodule2 import MyClass
我遇到的问题是,现在,使用相对导入,我无法将submodule1.py作为* main *运行。如果尝试,则会出现此错误:
from .module2 import MyClass
ModuleNotFoundError: No module named '__main__.module2'; '__main__' is not a package
我想包括'如果名称 ==“ 主 ”:'在我的模块月底在开发期间测试(在某些情况下一个模块,甚至可能是作为一个独立的脚本有用)。
有没有办法在这个蛋糕上“也吃我的蛋糕”?还是我最好的选择是将代码从if name ==“ main ”:
迁移到单独的脚本?
问题来源:stackoverflow
看来您试图将模块当作独立的脚本而不是作为软件包的成员来运行。在包中运行模块时,需要让Python知道模块在包结构中的位置。这是通过使用-m命令行标志调用Python解释器来完成的。例如,代替写作
python3 ./my_package/subpackage/submodule1.py
跑
python3 -m my_package.subpackage.submodule1
这将使解释器能够适当地确定您的包的结构,并解决您使用的任何相对导入。有关更多信息,请参见有关使用-m标志的相关问题。
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。