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 安装的包).

参考链接

pip列表和sudo pip列表显示不同的包版本-腾讯云开发者社区-腾讯云 (tencent.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值