从当前文件夹外部导入 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 正在查找您添加的目录,并且导入在层次结构中低于它们。
我有这个目录结构。 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 正在查找您添加的目录,并且导入在层次结构中低于它们。