Linux中Python已经安装了某个模块却报错?(ModuleNotFoundError: No module named)和pip list 和 sudo pip list 的差异.
目录
背景
在使用glibc_all_in_one管理glibc时用到了requests这个模块.报了这个ModuleNotFoundError: No module named.本次的python是linux内置的python,非anaconda进行管理的.这个问题是我在用WSL2跑python脚本时遇到的,相信记录下来有一定意义.
工作流
先通过
python --version
查看是否有python,没有安装就行
若是找不到.试试
python3 --version
或者使用(和上面同理)
which python (which python3)
这时候可以使用pip 去下载软件包.没有pip 则apt 安装之.
通过
pip install requests
去安装模块.(requests是我所需要的模块)
通过pip list 去查看pip已经安装的
通过 sudo pip list 去查看则会发现不一样.
sudo pip list 与pip list 显示安装的软件包不同.
什么原因导致了我发现了这个问题?
在新建了一个目录下,这个新建的目录没有读写权限,我在该目录下有一个脚本,使用./update 去执行这个脚本(这个脚本涉及到了对文件的读写) 运行发现是没有权限在该目录下进行写操作.于是果断加 sudo .然后报ModuleNotFoundError , 于是 pip install requests ,通过pip list 发现该模块已经装上了,然后继续 sudo ./update 执行还是报ModuleNotFoundError. 试试./update 则报没有权限在该目录下进行写操作。于是我给该目录加了权限 执行
chmod 777 目录名
再./update 发现正常运行了.于是思路为什么sudo ./update 用不了.sudo 能解决该目录的权限问题,那么问题就是sudo ./update 确实找不到我们 pip 安装的模块.于是发现pip list 和 sudo pip list 的区别.同理 在终端下执行 python 和 sudo python 也是同理的,前者能找到pip 安装的包,后者则不能.
终端下调用python
终端下调用 sudo python
这与上面的pip list 和sudo pip list 对应上了.
查找资料如下
推测pip install 则是为当前用户安装包.
而通过sudo pip install 则是为root 用户安装软件包.
通过 ~/.local/lib/pythonxxx/site-package确实查到了pip install安装的包.
我用sudo pip install requests(在 pip install requests 之后) 成功为root用户安装了包,
结束
问题得到解决.ModuleNotFoundError 可能是没有安装包,也可能是当前用户下安装了,但却用了root用户权限去执行python(而root用户下并没有pip 安装的包).
参考链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?