Python执行from app import db提示No module named 'app'如何解决
问题现象
Python终端执行导入语句触发模块未找到异常:
from app import db
报错详情:
Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'app'
排查思路
- 校验Python终端当前工作目录是否为
app模块所属的项目根目录:Python默认仅将当前执行目录、系统内置模块路径、PYTHONPATH环境变量配置路径、第三方包安装路径加入模块搜索列表,不在搜索列表里的模块无法直接导入 - 校验
app的包结构合法性:确认对应目录名拼写完全匹配(注意Linux/macOS系统文件名大小写敏感,App、APP都无法匹配app),目录下是否存在__init__.py文件(Python3.3+虽支持隐式命名空间包,但常规项目显式添加该文件可避免大部分识别异常) - 校验当前使用的Python解释器是否匹配项目环境:避免出现虚拟环境、全局Python环境混用的情况,不同环境的模块搜索路径完全隔离
- 校验是否存在模块重名冲突:确认
app模块名没有和Python内置模块、已安装的第三方模块重名,否则Python会优先加载优先级更高的其他同名模块,找不到项目内的app包
解决方案
- 临时生效方案(仅当前终端会话有效):启动Python终端后,手动将项目根目录加入模块搜索路径,再执行导入,操作示例:
import sys # 将路径替换为自身项目根目录的绝对路径 sys.path.append("/home/xxx/my_project") from app import db - 快速使用方案:先通过终端命令切换到项目根目录,确认当前工作路径正确后再启动Python终端
- Linux/macOS 执行
pwd查看当前路径,用cd 项目根目录路径切换 - Windows 执行
cd查看当前路径,用cd /d 项目根目录路径切换
- Linux/macOS 执行
- 永久生效方案(适配虚拟环境开发场景):找到当前虚拟环境对应的
site-packages目录,在目录下新建一个后缀为.pth的配置文件(比如命名为project_path.pth),文件内单独写一行项目根目录的绝对路径即可,Python启动时会自动加载.pth文件内配置的所有路径到模块搜索列表 - 包结构修复:如果
app目录下缺少__init__.py,直接新建空的同名文件即可;如果存在目录名拼写、大小写错误,直接修正为app - 解释器修复:执行
which python(Linux/macOS)或where python(Windows)查看当前调用的Python解释器路径,切换到项目对应虚拟环境的解释器后再执行导入操作
内容的提问来源于stack exchange,提问作者Kranthi Kumar
相关产品推荐
相关产品推荐

