pip install:如何强制安装特定版本的软件包

35
我正在尝试安装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,然后再运行你的命令吗? - NT3RP
是的,我试过了,但不起作用。我也有另一种选择,即下载软件包并手动安装,但我想知道是否有在pip中避免此行为并强制使用1.4.3版本的选项。 - kothvandir
2
你尝试过只用 pip install Django==1.4.3 吗? - catherine
1
是的,我做了,并且结果是一样的。 - kothvandir
3个回答

17

清除pip中Django的构建目录可能会有所帮助。

自版本1.1以来,存在此问题详情请见此处

如果您使用OS X或类Unix系统,则可以从这里开始检查这些文件夹:

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

如果在安装第一个版本的Django时没有指定新的构建文件夹,则会发生这种情况。

祝好运!


无论是使用-v标志还是设置“Django<=1.5”或使用“Django==1.4.3”,都无法正常工作。它没有输出错误,1.5版本安装正确,但仍然提示请求的Django==1.4.3,但安装的是1.5版本。 - kothvandir
1
@aiham,你是100%正确的,我刚醒来,打算修正答案。 - Henrik Andersson
1
如果你使用的是OS X操作系统,请检查/.pip和/tmp/文件夹。 - Henrik Andersson
1
我使用的是OS X,但是它不在那里。我在/tmp/pip-build-root/中找到了它。我将清除它并再次尝试,谢谢。 - aiham
我在Ubuntu上遇到了同样的问题,并在相同位置找到了构建目录,即/tmp/pip-build-root。如果您在执行非sudo pip安装时遇到问题,还可能需要删除/tmp/pip-build-<username>目录。 - dgh
显示剩余4条评论

8

正如limelight所说,您应该清空缓存和构建目录,或者使用--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,但情况可能会发生变化。考虑以与使用python 3更改系统安装的python相当的方式使用sudo安装python包;现在可能有效,但是准备好一些解热药,因为你将面临一些头痛的问题。

在Windows上使用Cygwin时,您需要同时使用上述两个标志才能使pip忽略缓存。 这是一个奇怪的设计 - 人们会认为添加-U并强制指定版本意味着我真正想要该版本,而不是恰好在我的缓存中的随机版本。 - fastmultiplication

5

检查并清除本地缓存有助于解决问题。我已经安装了pymongo==2.5.2版本。为了安装pymongo==2.4.1版本,我在/tmp/pip-build-root/pymongo中清除了缓存。随后我成功地安装了pymongo 2.4.1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接