pip install:如何强制使用特定的软件包版本

Posted

技术标签:

【中文标题】pip install:如何强制使用特定的软件包版本【英文标题】:pip install: How to force a specific package version 【发布时间】:2013-03-19 09:42:06 【问题描述】:

我正在尝试安装 Django 1.4.3,但是当我执行 pip install 时,pip 继续安装 Django 1.5 版本而不是 1.4.3

sudo pip install -I Django==1.4.3

返回:

Downloading/unpacking Django==1.4.3
  Running setup.py egg_info for package Django

    warning: no previously-included files matching '__pycache__' found under directory '*'
    warning: no previously-included files matching '*.py[co]' found under directory '*'
=== >>>> Requested Django==1.4.3, but installing version 1.5 <<<< ====
Installing collected packages: Django
  Found existing installation: Django 1.5
    Uninstalling Django:
      Successfully uninstalled Django
  Running setup.py install for Django

    warning: no previously-included files matching '__pycache__' found under directory '*'
    warning: no previously-included files matching '*.py[co]' found under directory '*'
    changing mode of /usr/local/bin/django-admin.py to 755
Successfully installed Django
Cleaning up...

但是如果我执行 pip freeze,它会一直显示

Django==1.5

我做错了什么?

谢谢

【问题讨论】:

愚蠢的问题,但是您是否尝试过卸载所有版本的 Django,然后运行您的命令? 是的,我做过,但没用。我也可以选择下载软件包并手动安装,但我想知道 pip 中是否有一个选项可以避免这种行为并强制使用 1.4.3 版本 你只试过pip install Django==1.4.3 是的,我做了,结果是一样的 【参考方案1】:

这可以/应该/可以通过在 pip 中清除 Django 的构建目录来帮助。 这有一个错误,因为版本 1.1 see here for details

如果您使用的是 OS X 或类似 unix 的系统,则可以在此处开始检查这些文件夹:

~/.pip 
/tmp/pip-build-root (or pip-build-$USER, if you aren't running pip as root).

如果您在安装 Django 的第一个版本时没有指定新的构建文件夹。

祝你好运!

【讨论】:

它不起作用,无论是使用 -v 标志还是设置“Django 我很确定-V标志仅用于输出当前安装的pip版本,与pip install无关。 @aiham 你是 100% 正确的,刚刚醒来并计划修复答案。 如果您使用的是 os x,请检查 ~/.pip 和 ~/tmp/ 文件夹。 我在 OS X 上,但它不存在。我在 /tmp/pip-build-root/ 中找到了它。我会清除它并再试一次,谢谢。【参考方案2】:

作为limelight says,您应该清空缓存并构建目录,或者使用--download-cache 和标志传入一个临时干净的位置。

$ pip help install
[...]
--download-cache <dir>      Cache downloaded packages in <dir>.
-b, --build <dir>           Directory to unpack packages into and build in. The default in a virtualenv is "<venv path>/build". The default for global installs is
                          "<OS temp dir>/pip-build-<username>".

我想警告任何读者不要使用sudo pip install 来安装 Django。它在系统范围内安装 Django。并且更改系统范围的版本可能会破坏依赖它的系统包。例如,Ubuntu MAAS 和 Cobbler 依赖于系统 django 包。这些通常是您不想破坏的服务。

如果您需要与系统包不同的版本,请使用virtualenv 将您的依赖项与系统隔离。

OP 似乎在 OSX 上,我不知道有任何服务器范围的 Mac Django,但这可能会改变。考虑安装带有sudo 的python 包,以将系统安装的python 更改为python 3;它现在可能有效,但有一些扑热息痛库存,因为你会头疼。

【讨论】:

在带有 cygwin 的 Windows 上,您需要上述两个标志才能让 pip 忽略缓存。这是一个奇怪的设计——有人会认为添加 -U 并强制一个版本意味着我真的想要那个版本,而不是碰巧在我的缓存中的随机版本。【参考方案3】:

检查您的本地缓存并将其删除会有所帮助。我已经安装了 pymongo==2.5.2。安装pymongo==2.4.1,我把/tmp/pip-build-root/pymongo中的缓存去掉,然后我就成功安装了pymongo 2.4.1了。

【讨论】:

以上是关于pip install:如何强制使用特定的软件包版本的主要内容,如果未能解决你的问题,请参考以下文章

pip:从特定目录卸载包

使用 pip 安装特定的软件包版本

如何卸载使用 easy_install 安装的软件包的非活动版本

如何强制 keras 使用 tensorflow GPU 后端

卸载使用 `pip install 安装的软件包。

新系统下如何pip install pandas?