从一个文件夹导入另一个文件夹中的文件

5

我知道有类似的问题,但在这个简单的设置中,我发现不是很清楚。 在给定的目录树中,如何从file1.py导入一个函数到file2中(我们从file2.py调用解释器)? 我希望这个设置可以独立于main_folder的位置工作,也就是说,如果我将main_folder复制到另一个目录,导入仍然能够正常工作。

main_folder
    folder1
        file1.py (with a function func())
    folder2
        file2.py

Python解释器最初调用的启动脚本是什么/在哪里? - Michael Butscher
起始脚本是file2.py文件。 - cerebrou
2
使用 SourceFileLoader 的答案可以给你想要的结果,但从长远来看,你真的应该学习如何创建和使用包。 - Jasmijn
那么,使用软件包会是一个解决方案吗? - cerebrou
2个回答

2
你可以使用 SourceFileLoaderimportlib.machinery 导入路径中的模块。
因此,你可以使用以下代码:
# file2.py

from importlib.machinery import SourceFileLoader

PATH = "../folder1/file1.py"
file1 = SourceFileLoader("module.name", PATH).load_module()

如果您想从包中导入,那么可以使用以下代码:

或者如果您想要从一个包中导入,则可以使用:

# file2.py

from folder1.file1 import func

如果您想使用包的方法,则需要从main_folder运行它。

0

你也可以将绝对路径添加到sys.path中。

sys.path

一个字符串列表,指定模块的搜索路径。从环境变量PYTHONPATH和一个与安装相关的默认值初始化。

在程序启动时初始化,此列表的第一项path[0]是包含用于调用Python解释器的脚本的目录。如果脚本目录不可用(例如,如果交互式地调用解释器或者从标准输入读取脚本),则path[0]为空字符串,这会让Python首先在当前目录中搜索模块。请注意,脚本目录被插入到由PYTHONPATH导致的条目之前。

程序可以自由修改此列表以适应其自身目的。只能向sys.path添加字符串和字节;在导入期间忽略所有其他数据类型。

import sys
from pathlib import Path
sys.path.append(str(Path(sys.path[0]).resolve().parent / "folder1"))
import file1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接