Python如何从父目录文件导入函数 解决相对导入报错问题
父目录模块导入失败解决方案
错误原因
该报错有两个核心诱因:
- 导入语句写法错误:b.py位于
Folder2/Subfolder2/路径下,父目录为Folder2,正确的相对导入指向应为上级目录..而非.Folder2 - 直接运行b.py作为脚本时,Python会将b.py所在的
Subfolder2目录设为顶级模块搜索路径,无法识别上层的Folder2为合法Python包,因此禁止使用相对导入
可行解决方案
方案1:直接添加父目录到模块搜索路径(最常用,无需调整项目结构)
在b.py的最开头添加如下代码,即可直接导入a模块:
import sys from pathlib import Path # 获取Folder2的绝对路径并加入Python搜索路径 sys.path.append(str(Path(__file__).parent.parent.resolve())) # 直接导入a模块即可调用其中的自定义函数 import a # 调用示例:a.自定义函数名()
方案2:使用包结构+模块模式运行
如果你希望使用相对导入的写法,可按以下步骤操作:
- 在Folder2、Subfolder2目录下各新增一个空的
__init__.py文件,标记目录为Python可识别的包 - 将原来的导入语句修改为
from .. import a - 不要直接运行b.py,切换到Folder1所在的目录,使用模块模式运行脚本:
python -m Folder2.Subfolder2.b
方案3:临时添加环境变量(适合单次测试场景)
运行脚本前临时把Folder2的路径加入PYTHONPATH环境变量即可:
- Linux/macOS终端:
PYTHONPATH=/你的/实际/路径/Folder1/Folder2 python Subfolder2/b.py - Windows cmd:
set PYTHONPATH=C:\你的\实际\路径\Folder1\Folder2 && python Subfolder2\b.py - Windows PowerShell:
$env:PYTHONPATH = "C:\你的\实际\路径\Folder1\Folder2"; python Subfolder2\b.py
内容的提问来源于stack exchange,提问作者user16486968
相关产品推荐
相关产品推荐

