【问题标题】:Python: SystemError Parent module not loaded, cannot perform relative importPython:SystemError父模块未加载,无法执行相对导入
【发布时间】:2018-06-01 09:02:23
【问题描述】:

我知道已经有很多类似的问题,但不幸的是我还没有找到如何应用到我的问题。

我的项目结构如下:

Project
|___ maincode
      |___ __init__.py
      |___ losses.py
      |___ bin
           |___ __init__.py
           |___ train.py

然后在train.py 我有以下代码:

# Allow relative imports when being executed as script.
if __name__ == "__main__" and __package__ is None:
    __package__ = "maincode.bin"
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))

    from .. import losses

def main(args=None):
    #some code here

if __name__ == '__main__':
    main()

现在,如果我从项目主目录Project/ 执行脚本train.py,即在终端中运行以下命令:

maincode/bin/train.py

然后我得到以下错误:

SystemError: 父模块 'maincode.bin' 未加载,不能 执行相对导入

我用 Python 2.7.6 和 Python 3.5.2 都试过了,得到了同样的错误。

你能帮忙吗?提前谢谢!

【问题讨论】:

  • 你想只运行 train.py 还是整个应用程序?
  • @edlee 主要代码在train.py,这取决于项目的其余部分,所以我想我必须运行整个应用程序?
  • 什么 - 文档说应该有效。我不明白为什么没有。
  • @user2357112 我不知道 :(

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


【解决方案1】:

如果您只想运行该模块而不是整个包。执行 python -m maincode.bin.train 告诉 python 将其作为模块运行。

如果您想运行整个包,请将目录更改为项目:cd /path/to/project,然后运行:python maincode,如果您的代码设置正确,它应该运行 train.py。

否则,将脚本移出包并自行运行。

更多关于这个和理解包可以在这里找到: Relative imports for the billionth time

【讨论】:

  • 我试过python -m maincode.bin.train,它成功了!非常感谢!
【解决方案2】:

同一目录下的文件只能使用“import module”,不能使用“from”关键字,原因不明

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-23
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多