pip + virtualenv:腐败的状态

时间:2013-06-23 19:48:07

标签: python virtualenv pip ipython virtualenvwrapper

这看起来像一个损坏的状态某处

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

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

...但是从virtualenv中看到的ipython而不是在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中看到的pippython的副本是

(myvenv)% which pip
/home/yt/.virtualenvs/myvenv/bin/pip
(myvenv)% which python
/home/yt/.virtualenvs/myvenv/bin/python
显然,有些州在这里已经腐败了,我想知道哪个州。我强调我主要对第一个感兴趣,弄清楚什么是错的,只有第二个,修复它。 IOW,我对疑难解答问题很感兴趣,并且对通过盲目试错“解决”问题感兴趣。根据我的经验,通过这种盲目混淆产生的“修复”只是显而易见的,实际上往往会使潜在的纠结更加糟糕。

我的直接问题是:

  1. 为什么pip/usr/lib/python2.7/dist-packages即使virtualenv有效?
  2. 为什么pip freeze显示ipython==0.12.1,即使virtualenv下没有ipython

1 个答案:

答案 0 :(得分:0)

可以使用或不使用“系统站点包”创建Virtualenvs。即您可以选择是否希望能够在virtualenv中查看系统安装的内容。你必须创建virtualenv,以便它可以看到其他包。这解释了你的qustions 1和2 - pip看到了你的系统安装IPython。

如果您在virtualenv中安装了某些东西,它将始终在系统范围的副本之前使用它。因此,您可以通过运行:

将最新版本的IPython安装到virtualenv中
pip install --upgrade ipython