Python:SystemError父模块未加载,无法执行相对导入

时间:2017-12-19 00:14:10

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

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

我的项目结构如下:

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()

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

maincode/bin/train.py

然后我得到以下错误:

  

SystemError:父模块' maincode.bin'没装,不能   执行相对导入

我尝试使用Python 2.7.6和Python 3.5.2并获得了相同的错误。

你可以帮忙吗?提前谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

否则,将脚本移到Package外部并自行运行它。

有关此内容的更多信息并且可以在此处找到包: Relative imports for the billionth time

答案 1 :(得分:0)

同一目录中的文件只能使用"导入模块"并且不能使用"来自"关键字,原因不明