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

SystemError: Parent module '' not loaded, cannot perform relative import

本问题已经有最佳答案,请猛点这里访问。

我有以下目录:

1
2
3
4
5
myProgram
└── app
    ├── __init__.py
    ├── main.py
    └── mymodule.py

MyMeult.Py:

1
2
3
4
5
6
7
class myclass(object):

def __init__(self):
    pass

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

MY.PY:

1
2
3
4
5
from .mymodule import myclass

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

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

1
2
3
4
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

这工作:

1
from mymodule import myclass

但当我输入这个代码时,并没有自动完成,并且有一条消息:"Unresolved Reference:MyModule"和"Unresolved Reference:MyClass"。在我正在进行的另一个项目中,我得到了一个错误:"importerror:没有名为"mymodule"的模块。

我能做什么?


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

例如,在您的案例中,您将编写如下内容:

1
from app.mymodule import myclass

您可以在文档中看到。

Note that relative imports are based on the name of the current
module. Since the name of the main module is always"__main__",
modules intended for use as the main module of a Python application
must always use absolute imports.


我通常使用这种解决方法:

1
2
3
4
try:
    from .mymodule import myclass
except Exception: #ImportError
    from mymodule import myclass

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


如果你只是在app下运行main.py,就像导入一样

1
from mymodule import myclass

如果要在其他文件夹上调用main.py,请使用:

1
from .mymodule import myclass

例如:

1
2
3
4
5
6
├── app
│&nbsp;&nbsp; ├── __init__.py
│&nbsp;&nbsp; ├── main.py
│&nbsp;&nbsp; ├── mymodule.py
├── __init__.py
└── run.py

Me.Py

1
from .mymodule import myclass

Py

1
2
from app import main
print(main.myclass)

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


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

1
[username@localhost myProgram]$

而不是这样:

1
[username@localhost app]$

一旦出现,就不用按以下格式运行脚本:

1
python3 mymodule.py

将其更改为:

1
python3 app/mymodule.py

根据树图的结构,这个过程可以在一个级别上再次重复。还请包括为您提供上述错误消息的编译命令行。