Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从另一个文件夹导入一个文件夹中的文件_Python - Fatal编程技术网

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

Python 从另一个文件夹导入一个文件夹中的文件,python,Python,我知道也有类似的问题被问到,但在这个简单的环境中,我发现的不是很清楚。给定此目录树,如何将函数从file1.py导入file2(我们从file2.py调用解释器)?我希望此设置在main_文件夹所在的位置独立工作,也就是说,如果我将main_文件夹复制到其他目录,导入仍能正常工作 main_folder folder1 file1.py (with a function func()) folder2 file2.py 可以使用“从”从路径导入

我知道也有类似的问题被问到,但在这个简单的环境中,我发现的不是很清楚。给定此目录树,如何将函数从
file1.py
导入
file2
(我们从
file2.py
调用解释器)?我希望此设置在
main_文件夹
所在的位置独立工作,也就是说,如果我将
main_文件夹
复制到其他目录,导入仍能正常工作

main_folder
    folder1
        file1.py (with a function func())
    folder2
        file2.py
可以使用“从”从路径导入

因此,您可以使用:

#file2.py
从importlib.machine导入SourceFileLoader
PATH=“../folder1/file1.py”
file1=SourceFileLoader(“module.name”,PATH).load\u module()
或者,如果要从软件包中导入,则可以使用:

#file2.py
从folder1.file1导入函数

如果要使用包方法,则需要从
main_文件夹运行它

也可以将绝对路径添加到

系统路径

指定模块搜索路径的字符串列表。从环境变量
PYTHONPATH
初始化,加上依赖于安装的默认值

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

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


Python解释器最初调用的起始脚本是什么/在哪里?起始脚本是file2.py涉及
SourceFileLoader
的答案应该能满足您的需要,但从长远来看,您应该真正学会如何制作和使用包。那么使用包的解决方案是什么呢?
import sys
from pathlib import Path
sys.path.append(str(Path(sys.path[0]).resolve().parent / "folder1"))
import file1