从当前文件夹外部导入 python 函数

Importing python function from outside of the current folder

我有这个目录结构。 utils.py里面的代码是:

def hello():
    print("hello")

run.py里面的代码是:

from ..helper.utils import hello

hello()

使用此设置时出现错误:

    from ..helper.utils import hello
ImportError: attempted relative import with no known parent package

我知道有使用 sys.path.append() 的解决方案,但是如果有不使用它的解决方案会更好。

就这样做:from helper.utils import hello

并检查:Call a function from another file?

当前解决方案不起作用的原因是 Python 无法在项目层次结构中的同一级别跨多个目录执行相对导入,因此在本例中 mains//helper/。为了使这项工作 Python 用于查找包的搜索路径需要包含 helper/ 目录。

有 3 种方法可以处理此问题:运行 从终端中的目录,使用 sys.path,使用 PYTHONPATH。

i) 运行 从终端目录向上将解决问题,因为它会更改正在执行的脚本的根目录。因此,而不是 运行 脚本目录 - 例如,从 IDE - 您需要导航到更高的目录并使用终端执行脚本。例如,如果您位于 src/ 目录中,您可以使用以下代码执行脚本:

python mains/run.py

ii) 更新 sys.path 解决了问题,因为它在 Python 使用的搜索路径中添加了另一个目录,以便可以找到 helper/ 目录。可以使用以下代码更新:

import os
import sys

rootpath = os.path.join(os.getcwd(), '..')
sys.path.append(rootpath)

这会将 mains/ 上方的目录添加到搜索路径,并允许您从 helper/.

导入

iii) 除了上面的第二个选项,您还可以更新 PYTHONPATH 以包含您要搜索的目录,即与上面添加到 sys.path 的目录相同。

请注意,在使用这些解决方案时,您需要使用 from helper.utils import hello 导入。因为搜索路径已更新,您没有执行相对导入 - Python 正在查找您添加的目录,并且导入在层次结构中低于它们。