Python如何通过相对路径跨目录导入自定义函数
问题根因
Python的import语句不识别../这类文件系统相对路径写法,你写的导入语句不符合Python模块导入的语法规则,无法被解释器解析,所以运行失败。
可行实现方案
方案1:脚本内动态追加模块搜索路径(改动最小,适配当前目录结构)
Python导入模块时,会遍历sys.path列表下的所有路径查找目标模块,你只需要在Testing目录下的测试脚本开头,把Project根目录加入搜索路径,就能按模块名正常导入。
示例代码(Testing目录下的测试脚本):
import sys from pathlib import Path # 获取当前脚本所在目录的上级路径,也就是Project根目录的绝对路径 project_root = Path(__file__).parent.parent.resolve() # 将根目录加入模块搜索路径 sys.path.insert(0, str(project_root)) # 正常导入两个版本的函数,建议起别名区分避免重名冲突 from V1.helper import someFunc as someFunc_v1 from V2.helper import someFunc as someFunc_v2 # 直接调用即可 someFunc_v1("v1版本测试参数") someFunc_v2("v2版本测试参数")
注意:因为V1和V2目录下的工具文件名都是
helper.py,导入时必须用as指定不同别名,否则后导入的函数会覆盖先导入的同名函数。
方案2:标记目录为标准Python包
如果要长期维护这套代码,可以把目录改造成符合Python规范的可导入包结构:在Project根目录、V1目录、V2目录下各新建一个空的__init__.py文件,修改后的目录结构如下:
Project --__init__.py --V1 ----__init__.py ----helper.py --V2 ----__init__.py ----helper.py --Testing ----test_script.py
改造完成后,配合方案1的路径添加逻辑,导入逻辑会更稳定,也支持后续把不同版本的代码拆成独立模块调用。
方案3:运行时临时指定环境变量
如果不想修改测试脚本的代码,可以在运行脚本前,临时把Project根目录加入PYTHONPATH环境变量,解释器启动时会自动把该路径加入模块搜索列表:
- Mac/Linux 终端运行命令:
PYTHONPATH=/你的/Project/目录绝对路径 python Testing/test_script.py
- Windows CMD 运行命令:
set PYTHONPATH=你的\Project\目录绝对路径 && python Testing\test_script.py
配置完成后,脚本里直接写from V2.helper import someFunc即可正常运行。
内容的提问来源于stack exchange,提问作者waslow
相关产品推荐
相关产品推荐

