Python跨目录导入函数报module not found错误如何解决
Python导入同项目模块报ModuleNotFoundError解决方案
你的问题核心是Python模块搜索路径匹配错误、导入语句和运行方式不匹配,按下面步骤排查修复即可:
先确认项目结构
首先确保你的目录结构完全符合下面的规范,__init__.py文件位置不要错:
your_project_folder/ # 项目最外层文件夹,命名无强制要求 └── app/ # 所有业务代码存放的根包 ├── __init__.py ├── utils/ │ ├── __init__.py │ └── calculators.py └── tasks/ ├── __init__.py └── process_sessions.py
报错原因和对应修复方案
你写的from utils.calculators import calculate_session属于顶级绝对导入,只有当Python能在模块搜索路径里直接找到utils这个顶级包的时候才能生效,你现在运行代码时的工作目录不对,自然找不到模块。两种修复方案选一种即可:
方案1:用包内相对导入(无需额外配置,适合包内模块互相调用)
直接修改app/tasks/process_sessions.py里的导入语句:
# 两个点代表从当前tasks目录向上跳一级到app目录,再找utils包 from ..utils.calculators import calculate_session
注意:用相对导入时不能直接运行单个脚本文件(比如不能直接执行python process_sessions.py或者python tasks/process_sessions.py),要从最外层的your_project_folder目录下,用模块模式运行:
python -m app.tasks.process_sessions
方案2:保留原绝对导入,修正Python搜索路径
如果你不想改导入语句,就把项目最外层的your_project_folder目录加入Python的模块搜索路径,有两种简单实现方式:
- 每次运行前先切到
your_project_folder目录(就是能看到app文件夹的那一级),再用上面的-m参数运行模块即可。 - 给虚拟环境安装可编辑模式的项目包,一劳永逸:
- 在
your_project_folder目录下新建pyproject.toml文件,写入以下内容:[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "your-app" version = "0.1" packages = ["app"] - 激活你的虚拟环境,在
your_project_folder目录下执行命令:pip install -e .
- 在
常见踩坑点排查
- 检查
__init__.py文件名是否正确,必须是前后各两个下划线,不要写成_init_.py或者init.py,文件要放在对应包目录下,不要放错层级。 - 不要直接在app目录或者tasks目录下运行脚本,这种运行方式会把当前脚本所在目录加入搜索路径,找不到同级的其他包。
- 如果用PyCharm、VSCode等IDE运行,记得把最外层的
your_project_folder标记为项目源码根目录,避免IDE提示导入错误。
内容的提问来源于stack exchange,提问作者Erick
相关产品推荐
相关产品推荐

