虚拟环境中的pip未在正确的Python环境中安装包
在我激活一个虚拟环境之后,我执行了这个命令:pip install requests,结果出现了这个:
sudo pip install requests
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/local/lib/python2.7/dist-packages
Cleaning up...
现在当我运行python并尝试在使用虚拟环境的python中导入它时,
>>> import requests
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named requests
>>>
我想,可能是它在找错误的python,所以我执行了which python和which pip命令。
(dev)sshum@mysite:~/dev/bin$ which python
/var/www/mysite/mysite/dev/bin/python
(dev)sshum@mysite:~/dev/bin$ which pip
/var/www/mysite/mysite/dev/bin/pip
但是,如果我先停用虚拟环境,然后再尝试导入这些包,它就能成功导入。我不太确定我哪里做错了。
3 个回答
0
这个错误发生在我从另一个控制台用pip安装东西的时候,我以为我还在激活的虚拟环境中,其实我已经在系统的Python环境里了。
我使用byobu
,可以在一个屏幕上同时打开多个控制台,这让我很享受。
- 我按F2打开一个新的完整窗口
- 我激活我想要工作的虚拟环境
- 出于某种原因,我把屏幕分割开,在新的分割窗口里工作
如果我忘记在新的分割窗口里激活虚拟环境,就会遇到你描述的那种问题。
0
经过一番折腾,我找到了问题的解决办法。看起来用 sudo pip install {package}
安装软件包时,会改变安装的路径。而因为我的虚拟环境放在了 var 文件夹里,所以我需要管理员权限才能安装东西(我意识到这样做其实不太好)。所以我选择了先用 su root
切换到管理员,然后在激活虚拟环境的情况下用 pip install
来安装。
0
如果其他方法都不行,或者你有特别的原因想继续使用sudo,可以直接指定pip
这个程序的路径:
sudo ./my/virtualenv/bin/pip install foobar