社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python为什么总是报ModuleNotFoundError?6种常见原因和解决方法

码上编程学习社 • 1 月前 • 152 次点击  

刚开始学 Python,很多人都见过这行红字:

ModuleNotFoundError: No module named 'requests'

第一反应往往是:“是不是Python没装好?”

其实,ModuleNotFoundError 的意思很直接:Python在当前环境和搜索路径里,没有找到你要导入的模块。

与其反复重装,不如按照下面6种情况逐个排查。

一、模块名拼错了

这是最简单,也最容易忽略的问题。

比如:

import requets

正确应该是:

import requests

模块名、大小写、下划线写错,都可能导致导入失败。所以看到报错后,第一步先检查 import 后面的名称。

二、第三方库根本没有安装

像 os、math 属于Python自带模块,一般不用额外安装。

但 requests、pandas 等第三方库,需要先安装:

python -m pip install requests

可以通过下面的命令检查:

python -m pip show requests

如果查不到,就说明当前Python环境里没有这个包。

三、包装了,但装错Python环境了

这是我认为新手最容易踩的坑之一。

电脑里可能同时存在系统Python、虚拟环境以及PyCharm配置的解释器。你用一个Python安装requests,却用另一个Python运行代码,自然还是找不到。

检查当前解释器:

import sys print(sys.executable)

再执行:

python -m pip --version

重点看两边显示的路径是否对应。

四、虚拟环境没有激活

假设你把requests安装到了项目的 .venv 中,下次打开终端却忘记激活,也可能导致环境不一致。

Windows:

.venv\Scripts\activate

macOS/Linux:

source .venv/bin/activate

激活后,终端前面通常会出现:

(.venv)

再运行项目试试。

五、自己写的模块路径不对

如果导入的是自己写的文件,例如:

import calculator

项目结构却是:

my_project/├── main.py└── utils/    └── calculator.py

那就不能想当然地直接 import calculator。

如果 utils 按包来组织,可以根据项目结构写成:

from utils import calculator

遇到这种情况,不要看到ModuleNotFoundError就去pip安装。先分清楚:你导入的是第三方库,还是自己项目里的模块。

六、文件名和第三方库“撞名”了

还有一个比较隐蔽的问题:自己创建的Python文件与第三方库或标准库重名。

例如项目里自己写了:

requests.py

代码中又:

import requests

Python可能优先找到你自己的 requests.py,进而产生导入异常或循环导入等问题。

因此项目文件尽量不要随便取 requests.py、json.py、random.py 这类容易与已有模块冲突的名字。

写在最后

以后再碰到:

ModuleNotFoundError

先别急着重装Python。

按照这个顺序检查:

名称有没有写错 → 包有没有安装 → Python解释器对不对 → 虚拟环境有没有激活 → 项目路径是否正确 → 文件有没有重名。

很多Python环境问题,真正难的不是“怎么修”,而是先搞清楚代码到底运行在哪个Python环境里。

把模块、pip、虚拟环境和解释器之间的关系理顺之后,再遇到类似报错,排查起来就会快很多。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/200721