我有以下目录:
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'的模块。
我该怎么办?
答案 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
此过程可以再次重复一次,具体取决于树形图的结构。还请包含为您提供上述错误消息的编译命令行。