虚拟环境中的pip未在正确的Python环境中安装包

4 投票
3 回答
1930 浏览
提问于 2025-04-18 07:14

在我激活一个虚拟环境之后,我执行了这个命令: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,可以在一个屏幕上同时打开多个控制台,这让我很享受。

  1. 我按F2打开一个新的完整窗口
  2. 我激活我想要工作的虚拟环境
  3. 出于某种原因,我把屏幕分割开,在新的分割窗口里工作

如果我忘记在新的分割窗口里激活虚拟环境,就会遇到你描述的那种问题。

0

经过一番折腾,我找到了问题的解决办法。看起来用 sudo pip install {package} 安装软件包时,会改变安装的路径。而因为我的虚拟环境放在了 var 文件夹里,所以我需要管理员权限才能安装东西(我意识到这样做其实不太好)。所以我选择了先用 su root 切换到管理员,然后在激活虚拟环境的情况下用 pip install 来安装。

0

如果其他方法都不行,或者你有特别的原因想继续使用sudo,可以直接指定pip这个程序的路径:

sudo ./my/virtualenv/bin/pip install foobar

撰写回答