尝试从其他文件夹导入python模块时发生导入错误



这是我的项目结构:

/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

相关内容

最新更新