3

这看起来像是某处的损坏状态。

首先,在 virtualenv 中,pip freeze报告安装了 ipython

% workon myvenv
(myvenv)% pip freeze | grep ipython
ipython==0.12.1

...但是ipython从 virtualenv 中看到的并不是安装在 virtualenv 下的那个:

(myvenv)% which ipython
/usr/bin/ipython

事实上,如果有人试图“卸载”安装在 virtualenv 下的 ipython 副本,pip 会拒绝这样做:

(myvenv)% pip uninstall ipython
Not uninstalling ipython at /usr/lib/python2.7/dist-packages, outside environment /home/yt/.virtualenvs/myvenv

它还将拒绝安装新副本:

(myvenv)% pip install ipython
Requirement already satisfied (use --upgrade to upgrade): ipython in /usr/lib/python2.7/dist-packages
Cleaning up...

顺便说一句,在 virtualenv 中看到pip的副本是python

(myvenv)% which pip
/home/yt/.virtualenvs/myvenv/bin/pip
(myvenv)% which python
/home/yt/.virtualenvs/myvenv/bin/python

显然,这里的某些状态已损坏,我想弄清楚是哪个状态。我强调我首先感兴趣的是找出问题所在,其次才是修复它。IOW,我有兴趣解决问题,而不是通过盲目试错来“解决”问题。以我的经验,通过这种盲目的混淆产生的“修复”只是表面上的,实际上往往只会使潜在的纠结变得更糟。

我的直接问题是:

  1. 即使 virtualenv 处于活动状态,为什么还要pip查看?/usr/lib/python2.7/dist-packages
  2. 为什么pip freezeshow ipython==0.12.1,即使ipython在 virtualenv 下没有?
4

1 回答 1

0

Virtualenvs 可以使用或不使用“系统站点包”来创建。即,您可以选择在 virtualenv 中时是否希望能够看到系统范围内安装的东西。您必须已经创建了 virtualenv,以便它可以看到其他包。这解释了您的问题 1 和 2 - pip 会看到您的 IPython 系统安装。

如果你在 virtualenv 中安装一些东西,它总是会在系统范围的副本之前使用它。因此,您可以通过运行以下命令将最新版本的 IPython 安装到 virtualenv 中:

pip install --upgrade ipython
于 2013-06-23T21:04:52.147 回答