为何激活venv后pip install -r requirements.txt仍安装到全局环境?
问题原因及解决办法
核心原因
你执行python3.9 -m pip install -r requirements.txt时,调用的是全局的Python3.9版本,而非虚拟环境内的版本。
虚拟环境激活后,PATH会优先指向.venv/bin,但这个目录下默认只有python、python3(软链接到python),没有python3.9可执行文件。系统找不到虚拟环境内的python3.9,就会去全局路径/usr/bin下找,此时调用的pip是全局Python3.9的pip,包自然被安装到全局环境。
至于你觉得python3.9 -m pip install pandas装到了虚拟环境,大概率是误判——比如虚拟环境中之前已存在pandas,或者你用虚拟环境的pip list查看时混淆了结果,实际这个命令同样会把包装到全局。
验证步骤
- 激活虚拟环境后执行:
若输出为which python3.9/usr/bin/python3.9,则确认调用的是全局版本。 - 换用虚拟环境的
python命令执行安装:
此时包会正常安装到虚拟环境。python -m pip install -r requirements.txt
解决方法
- 激活虚拟环境后,直接使用
pip或python命令,无需指定python3.9:
或:pip install -r requirements.txtpython -m pip install -r requirements.txt - 若必须使用
python3.9命令,可在虚拟环境目录下创建软链接:
之后执行ln -s .venv/bin/python .venv/bin/python3.9python3.9 -m pip就会调用虚拟环境内的版本。
内容的提问来源于stack exchange,提问作者Sudonym
相关产品推荐
相关产品推荐

