解决跨目录导入模块时ModuleNotFoundError: No module named 'dir2'问题
解决Python模块导入错误:ModuleNotFoundError: No module named 'dir2'
项目结构
- dir1/ - __init__.py - helper.py - dir1.py - dir2/ - __init__.py - dir2Functions.py - dir2main.py
问题描述
在dir1/helper.py中执行from dir2.dir2Functions import functionxx时,触发错误:ModuleNotFoundError: No module named 'dir2'。
解决建议
1. 手动将项目根目录加入Python路径
在helper.py的开头添加以下代码,把dir1和dir2的父目录(项目根目录)添加到Python的搜索路径中:
import sys import os # 获取项目根目录的绝对路径 root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(root_dir) # 现在执行导入 from dir2.dir2Functions import functionxx
2. 设置PYTHONPATH环境变量
临时将项目根目录添加到环境变量中,终端执行对应命令后再运行脚本:
- Windows终端:
set PYTHONPATH=你的项目根目录绝对路径 python dir1/helper.py - Linux/macOS终端:
export PYTHONPATH=你的项目根目录绝对路径 python dir1/helper.py
3. 使用相对导入(需以包形式运行)
将导入语句改为相对路径形式:
from ..dir2.dir2Functions import functionxx
注意:不能直接运行helper.py,必须从项目根目录以包模块的方式启动:
python -m dir1.helper
4. 将项目安装为可编辑包(长期开发推荐)
在项目根目录创建setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="your-project-name", version="0.1", packages=find_packages() )
然后在项目根目录执行命令,将项目安装为可编辑模式:
pip install -e .
安装完成后,在项目任何位置都能正常导入dir2模块。
内容的提问来源于stack exchange,提问作者Mry
相关产品推荐
相关产品推荐

