Python中如何实现特定目录结构下的相对导入?求助解决报错
解决script.py中导入module.py的问题
先明确你的目录结构:
folder0 | __init__.py | folder1 | | __init__.py | | folder2 | | | __init__.py | | | script.py | folder3 | | __init__.py | | module.py
你遇到的报错原因是:直接在folder2目录下执行python script.py时,Python会把folder2当作顶级目录,无法识别上层的folder0作为父包,所以相对导入找不到依赖的层级结构。以下是几种可行的解决方法:
方案一:从项目根目录以模块方式运行(推荐)
这是符合Python包设计逻辑的规范做法:
- 修改
script.py的导入语句(二选一):- 相对导入写法:
from ...folder3 import module - 绝对导入写法:
from folder0.folder3 import module
- 相对导入写法:
- 打开终端,切换到包含folder0的上级目录,执行命令:
或者进入python -m folder0.folder1.folder2.scriptfolder0目录后执行:python -m folder1.folder2.script
方案二:设置PYTHONPATH环境变量运行
通过把项目根目录folder0加入Python的模块搜索路径,让Python能直接定位到folder3:
- 修改
script.py的导入语句为绝对导入:from folder3 import module - 根据操作系统设置环境变量:
- Windows命令行:
set PYTHONPATH=你的folder0完整路径 cd folder0\folder1\folder2 python script.py - Linux/macOS终端:
export PYTHONPATH=/你的folder0完整路径 cd folder0/folder1/folder2 python script.py
- Windows命令行:
方案三:通过根目录入口脚本运行
在folder0下创建一个入口脚本,间接运行script.py:
- 在
folder0目录新建main.py,内容如下:from folder1.folder2 import script - 保持
script.py的相对导入语句不变:from ...folder3 import module - 切换到
folder0目录,执行:python main.py
内容的提问来源于stack exchange,提问作者Lei
相关产品推荐
相关产品推荐

