RHEL7多Python版本环境下Pip无法向virtualenv安装包问题
解决虚拟环境中pip安装包不生效的问题
嘿,我明白你现在遇到的问题了——这是从Windows转Linux用Python虚拟环境时非常容易踩的坑,咱们一步步把它理顺。
问题根源
你遇到的核心问题是sudo会绕过当前激活的虚拟环境:
- 当你用
sudo pip时,会切换到root用户身份执行命令,而root的环境变量并没有加载你当前用户的虚拟环境配置,所以这个pip其实是系统默认Python(2.7.5)的pip,包自然就装到系统级的/usr/lib/python2.7/site-packages里了。 - 而你激活的虚拟环境只对当前普通用户生效,root看不到这个环境的存在。
解决方案
1. 确保虚拟环境处于激活状态
先确认命令行开头有(venv)标识,如果没有,先激活虚拟环境:
source /home/butterp/venv/bin/activate
激活后,你可以用下面的命令验证当前用的是虚拟环境的pip:
which pip
输出应该是/home/butterp/venv/bin/pip,这就对了。
2. 不用sudo,直接安装依赖
虚拟环境的目录/home/butterp/venv是属于你的用户butterp的,你完全有读写权限,根本不需要sudo。直接执行:
pip install django
这时候Django会被安装到虚拟环境的venv/lib/python2.7/site-packages目录下,你再进入Python解释器就能正常导入了。
3. (可选)清理系统级的多余包
如果你之前用sudo装了系统级的Django,想要清理避免混淆,可以执行:
sudo pip uninstall django
小提示
虚拟环境的设计初衷就是隔离不同项目的依赖环境,所以所有和该虚拟环境相关的包安装、运行操作,都应该在激活环境后以普通用户身份执行,千万不要用sudo——这不仅会破坏环境隔离,还可能导致系统Python的依赖混乱。
内容的提问来源于stack exchange,提问作者PhilFlam
相关产品推荐
相关产品推荐

