Python3.10导入失败求助:跨目录模块导入如何实现?
Python跨目录导入问题解决办法
场景说明
项目结构:
project: src: dirA: __init__.py dirA_file.py # 含class A dirB: __init__.py utils: __init__.py utils_file.py # 需要导入A serve # 运行入口脚本
运行方式:在project根目录执行python src/dirB/serve
错误原因分析
from src.dirA.dirA_file import A报错:直接运行serve脚本时,Python仅将src/dirB加入模块搜索路径,project根目录不在路径内,无法识别src模块。- 相对导入报错:直接运行脚本时,脚本不被视为包的一部分,相对导入的层级定位会超出顶层包范围,触发"attempted relative import beyond top-level package"错误。
解决方案
方案1:手动添加根目录到搜索路径
在serve脚本开头加入以下代码,将project根目录加入Python模块搜索路径:
import sys import os current_script_dir = os.path.dirname(os.path.abspath(__file__)) project_root = os.path.abspath(os.path.join(current_script_dir, '../../')) sys.path.append(project_root)
之后在utils_file.py中使用绝对导入:
from src.dirA.dirA_file import A
方案2:以包模块方式运行
将serve重命名为serve.py(确保是可导入的模块文件),在project根目录执行以下命令运行:
python -m src.dirB.serve
此时utils_file.py支持两种导入方式:
- 绝对导入(推荐):
from src.dirA.dirA_file import A
- 相对导入:
from ...dirA.dirA_file import A
(...表示从当前模块src.dirB.utils.utils_file向上回溯两级到src目录,再定位到dirA)
方案3:通过环境变量指定根目录
运行脚本前,将project根目录添加到PYTHONPATH环境变量:
Linux/macOS:
export PYTHONPATH=/实际路径/project python src/dirB/serve
Windows(CMD):
set PYTHONPATH=C:\实际路径\project python src/dirB/serve
Windows(PowerShell):
$env:PYTHONPATH = "C:\实际路径\project" python src/dirB/serve
设置完成后,utils_file.py直接用绝对导入即可:
from src.dirA.dirA_file import A
内容的提问来源于stack exchange,提问作者Mahanchello
相关产品推荐
相关产品推荐

