SystemError:父模块''未加载,无法执行相对导入
我有以下目录:
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
但我没有自动完成,当我input这个,有一个消息:“未解决的引用:mymodule”和“未解决的引用:myclass”而在我的其他项目,我正在处理,我得到的错误:“ImportError:没有名为“mymodule”的模块
我能做什么?
我有同样的问题,我通过使用绝对导入,而不是相对的解决了它。
例如你的情况,你会写这样的东西:
from app.mymodule import myclass
你可以在文档中看到。
请注意,相对导入是基于当前模块的名称。 由于主模块的名称始终为“
__main__
”,因此用作Python应用程序主模块的模块必须始终使用绝对导入。
如果你只是运行app
下的main.py
,只需导入
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
。
我通常使用这个解决方法:
try: from .mymodule import myclass except Exception: #ImportError from mymodule import myclass
这意味着您的IDE应该select正确的代码位置,python解释器将设法运行您的代码。
如果您在bash shell的命令行中运行脚本,则该问题将得到解决。 为此,请使用cd ..
命令更改您的脚本将运行的工作目录。 结果应该是这样的:
[username@localhost myProgram]$
而不是这个:
[username@localhost app]$
一旦你在那里,而不是以下面的格式运行脚本:
python3 mymodule.py
将其更改为:
python3 app/mymodule.py
这个过程可以再一次重复一次,这取决于你的树形图的结构。 还请包括正在给你提到的错误信息的编译命令行。