为什么pip安装了旧版本的软件包?


79

我刚刚将软件包的新版本上传到PyPi(1.2.1.0-r4):我可以下载egg文件并使用easy_install进行安装,并且该版本可以正确签出。但是,当我尝试使用pip进行安装时,它将安装版本1.1.0.0。即使我明确指定要使用的版本,也会pip install -Iv tome==1.2.1.0-r4收到以下消息:Requested tome==1.2.1.0-r4, but installing version 1.1.0.0,但我不明白为什么。

我仔细检查parse_version并确认1.2.1上的版本字符串大于1.1.0上的版本字符串,如下所示:

>>> from pkg_resources import parse_version as pv
>>> pv('1.1.0.0') < pv('1.2.1.0-r4')
True
>>>

那么,为什么要选择安装1.1.0呢?


无法复制。pip install -Iv tome==1.2.1.0-r4安装对我来说(根据消息和两pip freezetome==1.2.1.0-r4
大卫·罗宾逊

它可能仍在您的路径中?试试看-U
Wolph

嗯..很好,很有趣。我试着用pip卸载它,我想我得再挖一些,确保一切都消失了。感谢您的检查!
brianmearns

看起来像是点子中的错误。我有类似的问题,但是我无法安装django-tastypie的旧版本。
Simplylizz 2013年

Answers:


95

这是一个很好的问题。我花了很长时间才弄清楚。这是适合我的解决方案:

显然,如果pip可以找到该程序包pip的本地版本,则将首选本地版本而不是远程版本。我什至断开了计算机与Internet的连接,然后再次尝试了-当pip仍然成功安装该软件包并且甚至没有抱怨时,该来源显然是本地的。

在我看来,真正令人困惑的部分是pippypi上找到了较新的版本,并进行了报告,然后继续安装并重新安装了较旧的版本... arggh。而且,它没有告诉我它在做什么,为什么。

那我怎么解决这个问题呢?

您可以pip使用该-v标志来提供详细的输出...但是一个还不够。我使用RTFM编辑该帮助,该帮助说您可以执行-v多次,最多3倍,以获得更多详细输出。所以我做了:

pip install -vvv <my_package>

然后我查看了输出。一行引起了我的注意:

/ tmp / pip-build-root /中的源版本为0.0.11,满足要求<my_package>

我删除了该目录,然后pip从pypi安装了最新版本。


看来此问题尚未解决。
2013年

1
@ Ale110已修复-有关详细信息,请参见我的答案。
Piotr Dobrogost

5
仅供参考,您可以使用-vvv代替-v -v -v
bfontaine 2014年

2
您也可以使用该--no-cache-dir标志,而不用搜寻和删除中的文件/tmp/
ethanabrooks

39

尝试通过以下方式强制再次下载软件包:

pip install --no-cache-dir --upgrade <package>

1
这对我有用。最终在v0.2.1之上安装了photoutils v0.4。Pip正在下载v0.4 tar,但随后它只会安装(或保留)v0.2.1。--no-cache-dir和--upgrade标志终于做到了!谢谢
scibuff

4
这是正确的答案。Pip默认情况下会将相关Pypi页面的缓存保留600秒。因此,即使您删除了本地缓存的程序包,也必须等待10分钟,以便pip可以获取包含所有新版本链接的新页面。
brthornbury

1
这似乎是一个非常合理的答案。但是,即使我看到的pip search是较新的版本,pip仍会安装相同的旧版本。
Mavamaarten

1
尝试使用virtualenv进行检查。啊python版本。
Iacchus

25

感谢Marcus Smith作为pip的维护者所做的出色工作,此问题已在2013年7月23日发布的1.4版pip中修复。

此版本的变更日志中的相关信息

修复了与清理和不重用构建目录有关的许多问题(#413,#709,#634,#602和#939)。(拉865、948)


5
这应该标记为正确答案。像这样升级点:pip install -U pip
EmilStenström2014年

2
此修复程序仍然无法使用缓存版本静默解决pip问题,可以使用Iacchus的答案来解决该问题
Burrito

1
不,它似乎没有固定。我现在遇到了同样的问题。
里吉斯

16

我在这里发现pip中有一个已知的错误,即如果存在带有解压源的构建目录,它将不会检查版本。我已经在我的问题包中检查了这一点,并从构建目录pip中删除了其源代码后,安装了所需的版本。


2
谢谢你提供的详情。知道我应该在哪里寻找构建目录吗?我尝试将其从Python \ Lib \ site-packages中删除,但结果相同。我不是从软件包存在的位置或任何位置执行命令。
brianmearns 2013年

@ sh1ftst0rm我在linux下使用virtualenv,对于django-tastypie,它是:“ $ VIRTUAL_ENV / build / django-tastypie”。尝试检查Python目录的顶部,或仅在系统中使用搜索。您也可以尝试使用“ pip install -b <自定义构建目录的路径>”。
justlizz

1
这似乎不是我的问题,我进行了广泛搜索,在系统上找不到该软件包或构建目录的任何痕迹。它必须是在PIP一些其它的错误=(好尖,无论如何,我敢肯定,这将是一个很多人修复。
brianmearns

9

如果您使用的pip是某些发行包附带的版本(例如Ubuntu python-pip),则可能需要安装较新的pip版本:

更新pip到最新版本:

sudo pip install -U pip

如果是“ virtualenv”,请跳过“ sudo”:

pip install -U pip

如果您的外壳-bash: /usr/bin/pip: No such file or directorypip更新后报告类似的内容,则可能需要以下命令:

hash -d pip

现在照常安装软件包:

pip install -U foo

要么

pip install foo==package.version.here


6

遇到了相同的问题,将pika 0.9.5更新为0.9.8。唯一的工作方式是从tarball安装:pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz


2
+1谢谢,这使我陷入了重要的境地:点子依赖于源代码发行版:在我的最新版本中,我忘记了上载源代码dist,因此当我尝试安装时,它只会得到以前的版本。这并不能解决我原来的问题,但有助于您了解。
brianmearns

1

就我而言,我必须删除.pip主目录中的文件夹,然后才能获得多个库的更高版本。请注意,这是在Linux上。

pip --version
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
virtualenv --version
15.1.0

0

我发现,如果您使用微版本,则pip似乎无法识别它们。例如,我们无法获取1.9.9.1版本进行升级。


2
也许是因为'1.9.9.1'不兼容SemVer,看到semver.org
tector


0

就我而言,我正在从Artifactory安装.tar.gz程序包,并对它进行了大量更新。为了覆盖缓存的Python文件并始终获取/安装最新版本,我能够运行:

pip install --no-cache-dir --force-reinstall <path/to/tar.gz>

您应该看到此重新下载所有必需的文件并进行安装,而不是使用本地缓存。


0

在我的情况下,有人出版了最新版本python2一包的,因此尝试pip3 install它抓住的是旧版本已经建成与python3。

调试时要检查的方便事项:

  • 如果pip install声称无法找到版本,请查看是否pip search可以看到它。
  • 看一下pypi存储库上的“下载文件”部分-文件名可能会提示出问题所在(就我而言,我看情况-py2-很清楚)。
  • 正如其他人所建议的那样,请尝试运行pip install --no-cache-dir以防pip麻烦询问互联网,因为它已经在本地找到了答案。

0

我在PyCharm的Git标签下隐藏了未版本化的文件,pip install .即使我在其他任何地方都没有看到这些文件,也可以将它们安装在一起。

花了很长时间为我找到它,将其发布以希望对其他人有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.