这是我的项目结构:
/my_project
/first_folder
first.py
/second_folder
second.py
second.py
def hello():
print('hello')
第一.py
from ..second_folder import second
second.hello()
当我第一次运行.py时,我得到以下错误:
ImportError: attempted relative import with no known parent package
我该如何避免这个问题?
通常,当您将脚本作为主模块运行时,不应该在其中使用相对导入。这是因为Python如何解析相对导入(使用__package__
变量等)
这也记录在这里:
请注意,相对导入基于当前单元由于主模块的名称总是CCD_ 2,打算用作Python应用程序主模块的模块必须始终使用绝对进口。
有一些方法可以实现这一点,例如,通过破解__package__
,使用-m
标志,向sys.path
添加一些路径(Python在其中查找模块),但最简单和通用的解决方案是始终在主脚本中使用绝对导入。
当你运行脚本时,Python会自动将脚本的目录添加到sys.path
中,这意味着该目录中的任何内容(这里first_folder
可以被解释器识别。但你的second_folder
不在该目录中,你需要为此添加my_project
(它有second_folder
目录)的路径。
将first.py
更改为:
import sys
sys.path.insert(0, "PATH TO /my_project")
from second_folder import second
second.hello()
通过这种方式,您可以很容易地进入first_folder
目录并运行脚本,如:python first.py
。
最后一句话:有了绝对进口,你就没有太多的复杂性。只考虑">您所在的位置";以及">哪些路径存在于CCD_ 14"中;。
此错误有多种来源,但如果您的项目目录是my_project
,则导入语句中可能不需要..
。
from second_folder import second