【问题标题】:pip + virtualenv: corrupted statepip + virtualenv:损坏的状态
【发布时间】:2013-06-20 07:40:46
【问题描述】:

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

首先,在 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

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

我的直接问题是:

  1. 为什么即使 virtualenv 处于活动状态,pip 仍在查看 /usr/lib/python2.7/dist-packages
  2. 为什么pip freeze显示ipython==0.12.1,即使virtualenv下没有ipython

【问题讨论】:

    标签: python virtualenv pip ipython virtualenvwrapper


    【解决方案1】:

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

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

    pip install --upgrade ipython
    

    【讨论】:

    • 谢谢。 “...您必须创建了 virtualenv,以便它可以看到其他包。”你会知道这个配置设置存储在哪里吗?
    • 创建 virtualenv 时,可以使用标志 --system-site-packages--no-site-packages。默认用于允许系统站点包,我认为大约在一年前更改为排除它们。
    • 还有一个 --ignore-installed 标志,它允许您再次安装新软件包,而无需升级(对于执行 --user 或 venv 安装很有用,当您在系统范围内安装了另一个版本时)不想碰)。
    猜你喜欢
    • 1970-01-01
    • 2023-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2021-09-13
    • 2022-01-26
    相关资源
    最近更新 更多