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 

这个过程可以再一次重复一次,这取决于你的树形图的结构。 还请包括正在给你提到的错误信息的编译命令行。