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

时间:2015-11-20 23:23:33

标签: python python-3.x

我有以下目录:

myProgram
└── app
    ├── __init__.py
    ├── main.py 
    └── mymodule.py

mymodule.py:

class myclass(object):

def __init__(self):
    pass

def myfunc(self):
    print("Hello!")

main.py:

from .mymodule import myclass

print("Test")
testclass = myclass()
testclass.myfunc()

但是当我运行它时,我得到了这个错误:

Traceback (most recent call last):
  File "D:/Users/Myname/Documents/PycharmProjects/myProgram/app/main.py", line 1, in <module>
    from .mymodule import myclass
SystemError: Parent module '' not loaded, cannot perform relative import

这有效:

from mymodule import myclass

但是当我输入时,我没有自动完成,并且有一条消息:“未解析的引用:mymodule”和“未解析的引用:myclass”。 在我正在处理的另一个项目中,我收到错误:“ImportError:没有名为'mymodule'的模块。

我该怎么办?

4 个答案:

答案 0 :(得分:47)

我遇到了同样的问题,我通过使用绝对导入而不是相对导入来解决它。

例如,在你的情况下,你会写这样的东西:

from app.mymodule import myclass

您可以在documentation

中看到
  

请注意,相对导入基于当前名称   模块。由于主模块的名称始终为“__main__”,   用作Python应用程序主模块的模块   必须始终使用绝对导入。

答案 1 :(得分:14)

我通常使用此解决方法:

try:
    from .mymodule import myclass
except Exception: #ImportError
    from mymodule import myclass

这意味着您的IDE应该选择正确的代码位置,python解释器将设法运行您的代码。

答案 2 :(得分:6)

如果您只是在main.py下运行app,只需导入

from mymodule import myclass

如果您想在其他文件夹上拨打main.py,请使用:

from .mymodule import myclass

例如:

├── app
│   ├── __init__.py
│   ├── main.py
│   ├── mymodule.py
├── __init__.py
└── run.py

<强> main.py

from .mymodule import myclass

<强> run.py

from app import main
print(main.myclass)

所以我认为你的主要问题是如何致电app.main

答案 3 :(得分:3)

如果你在bash shell的命令行中运行脚本一级,则问题将得到解决。为此,请使用cd ..命令更改将运行脚本的工作目录。结果应如下所示:

[username@localhost myProgram]$

而不是:

[username@localhost app]$

一旦你在那里,而不是以下列格式运行脚本:

python3 mymodule.py

将其更改为:

python3 app/mymodule.py

此过程可以再次重复一次,具体取决于树形图的结构。还请包含为您提供上述错误消息的编译命令行。