开发者社区> 问答> 正文

使用相对导入作为__main__运行模块

我有一个像这样的文件结构:

- __init__.py
- module.py
+ subpackage
|--- __init__.py
|--- submodule1.py
|--- submodule2.py
|--- etc
  • submodule1.py imports from submodule2.py
  • module imports from submodule1.py

为此,我正在使用相对导入。例如,在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

展开
收起
is大龙 2020-03-24 20:34:25 514 0
1 条回答
写回答
取消 提交回答
  • 看来您试图将模块当作独立的脚本而不是作为软件包的成员来运行。在包中运行模块时,需要让Python知道模块在包结构中的位置。这是通过使用-m命令行标志调用Python解释器来完成的。例如,代替写作

    python3 ./my_package/subpackage/submodule1.py
    

    python3 -m my_package.subpackage.submodule1
    

    这将使解释器能够适当地确定您的包的结构,并解决您使用的任何相对导入。有关更多信息,请参见有关使用-m标志的相关问题。

    回答来源:stackoverflow

    2020-03-24 20:34:31
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载