导入时出现ModuleNotFoundError:问题原因及解决方法
ModuleNotFoundError: No module named 'app_1' 的原因与解决办法
问题原因
- 模块搜索路径不包含项目根目录:当直接运行
app_2/file_B.py时,Python会自动将app_2所在目录加入模块搜索路径(sys.path),但包含app_1的项目根目录不在这个路径列表里,导致Python无法识别app_1这个顶级包。 - 包结构识别问题:如果
app_1或app_2目录下缺少__init__.py文件(Python 3.3+支持无此文件的命名空间包,但部分场景下仍需该文件明确标识包结构),也可能导致Python无法将其识别为可导入的包。
解决办法
方法1:手动添加项目根目录到搜索路径
在file_B.py的最开头添加代码,将项目根目录加入sys.path:
import sys import os # 获取项目根目录(file_B在app_2下,根目录是它的上一级目录) project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(project_root) # 现在可以正常导入 from app_1.file_A import function
方法2:使用相对导入(需以包方式运行)
修改file_B.py的导入语句为相对导入格式:
from ..app_1.file_A import function
注意:不能直接运行file_B.py,必须回到项目根目录,用模块方式执行:
python -m app_2.file_B
方法3:通过环境变量设置PYTHONPATH
在终端中先将项目根目录添加到PYTHONPATH,再运行脚本:
- Linux/macOS:
export PYTHONPATH="/绝对路径/MyProject:$PYTHONPATH" python app_2/file_B.py
- Windows(CMD):
set PYTHONPATH=C:\绝对路径\MyProject;%PYTHONPATH% python app_2\file_B.py
- Windows(PowerShell):
$env:PYTHONPATH = "C:\绝对路径\MyProject;$env:PYTHONPATH" python app_2\file_B.py
方法4:将项目安装为可编辑包(适合长期开发)
在项目根目录下创建setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="MyProject", version="0.1.0", packages=find_packages() )
然后在根目录执行命令,将项目安装为可编辑模式:
pip install -e .
安装完成后,你可以在任何位置正常导入app_1模块。
内容的提问来源于stack exchange,提问作者Etozeigor
相关产品推荐
相关产品推荐

