兄弟们,姐妹们,今天咱们不聊虚的,就聊聊编程里一个让我昨天半夜差点砸电脑的问题。
事情是这样的,昨天晚上我准备跑一个之前写的Python爬虫脚本,去爬点数据。代码逻辑啥的都没动,结果一运行,好家伙,控制台直接给我甩了一个大红脸:
ModuleNotFoundError: No module named 'requests'我当时就懵了。requests这个库,Python写网络请求的谁不用啊?我电脑上它绝对是“常住人口”。我心想,不能啊,我上周还用得好好的,这是闹鬼了?
于是,我熟练地打开终端,敲下那个刻在DNA里的命令:
pip install requests终端回馈的信息更是让我怀疑人生:
Requirement already satisfied: requests in /usr/local/lib/python3.9/site-packages (2.28.1)
看见没?“Requirement already satisfied”!它明明就在那儿躺着呢!就像你明明看见钥匙就插在门上,但你就是拧不开门一样,那种无力感,懂吗?
如果你是Python新手,遇到这个问题,我猜你可能已经准备重装Python,甚至重装系统了。别急,先放下手中的格式化命令,这事儿,八成不是电脑的错,也不是Python的锅,而是咱们被Python的“多环境”给绕晕了。
这个问题的核心,就在于你的电脑里可能不止一个Python。
大家想一下,我们用pip install装包,这个包是装到了某一个特定的Python解释器环境里。而你运行脚本时用的python命令,可能指向的是另一个完全不同的Python解释器。
这就像你有两套房子(Python环境),你把家具(requests库)搬进了A房子,但你自己却迷迷糊糊走进了B房子,然后大喊:“我家怎么连个沙发都没有!” —— 没错,报错的就是你。
怎么验证?
在你的终端里,输入以下两行“咒语”:
which python
# 或者 windows上是
where python再输入:
which pip
# 或者 windows上是
where pip看看这两个命令输出的路径是不是在同一个Python环境下面。比如,如果你的which python显示的是/usr/bin/python,而which pip显示的是/usr/local/bin/pip,那它们俩大概率就不是一家人。pip把包装到了/usr/local那套环境里,而你用/usr/bin的Python去运行,它不认识那些包,自然就给你脸色看。
知道了问题所在,解决起来就有思路了。别想着去改什么复杂的系统变量,咱们有更聪明的办法。
方案A:用“绝对忠诚”的夫妻档 -m 参数
这是我最喜欢,也是我昨天解决问题的办法。不要直接用pip install,而是用你的Python解释器去调用pip模块。命令如下:
python -m pip install requests看见这个-m没?它的意思是:“用我指定的这个python,去运行pip这个模块”。这就确保了安装包的Python,和你运行脚本的Python,绝对是同一个人。
你运行脚本是用python script.py,那么安装依赖就用python -m pip install 包名。这就叫用魔法打败魔法,用同一个Python解决所有问题。
方案B:如果你在用虚拟环境(强烈推荐)
说到这个,我又得唠叨两句。Python开发,一定要用虚拟环境啊朋友们!无论是venv还是conda,搞一个干净的、隔离的环境,能让你的项目之间互不干扰,从根源上杜绝这种“真假美猴王”的破事。
比如:
# 创建一个叫 myenv 的虚拟环境
python -m venv myenv
# 激活它 (mac/linux)
source myenv/bin/activate
# 激活它 (windows)
myenv\Scripts\activate
# 在这个环境里,你随便装,随便删,完全不污染全局
Python pip install requestspython your_script.py在虚拟环境里,pip和python天然就是绑定的,永远不会出现上面的问题。
方案C:物理超度——卸载重装?
实在不行,可以把你脚本第一行引用的那个Python解释器给记下来,比如是/usr/bin/python3,那你安装的时候就精准打击:
bash
复制下载
/usr/bin/python3 -m pip install requests这算是一个暴力但有效的物理超度方法。
昨天我解决完那个bug之后,在终端里看着脚本顺利跑起来,输出一行行数据,那种感觉,比喝了冰可乐还爽。
这个ModuleNotFoundError,说白了就是Python环境管理上的一点小混乱。只要你记住:“用哪个python跑,就用哪个python的pip装”,或者直接用python -m pip install,就能避开99%的坑。
希望今天这篇带点情绪的文章,能帮到正在被这个报错折磨的你。如果你也遇到过什么让人抓狂的Python小问题,欢迎在下面吐槽,咱们一起研究研究,争取下次不砸电脑。