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

我刚刚把我的软件包的新版本上传到了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检查parse_version并确认1.2.1上的版本string大于1.1.0上的版本string,如下所示:

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

那么有什么想法,为什么它select安装1.1.0呢?

这是一个很好的问题。 我永远花了我的时间来弄清楚。 这是适合我的解决scheme:

显然,如果pip可以find一个本地版本的软件包, pip会偏好本地版本到远程版本。 我甚至把我的电脑和互联网断开了连接,然后重新尝试了 – 当pip成功地安装了这个软件包的时候,甚至没有抱怨,源码显然是本地的。

在我的情况下,真正令人困惑的是, pip在pypi上发现了更新的版本,并报告了它们,然后继续重新安装旧版本… arggh。 另外,它没有告诉我它在做什么,为什么。

那么我是如何解决这个问题的?

你可以使用-v标志来获得详细的输出结果,但是一个是不够的。 我RTFM的帮助,说你可以做多次,多达3倍,更详细的输出。 所以我做了:

 pip install -v -v -v <my_package> 

然后我浏览了输出。 一条线引起了我的注意:

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

我删除了那个目录,之后pip从pypi安装了最新的版本。

感谢马库斯·史密斯 ( Marcus Smith) ,他在2013年7月23日发布了点子1.4版本的修正版。

来自此版本更新日志的相关信息

修复了一些与清理和不重用构build目录相关的问题(#413,#709,#634,#602和#939)。 (拉#865,#948)

我在这里发现,在pip中有一个已知的bug,如果有一个构build目录与解压源,它不会检查版本。 我已经检查了我的麻烦包,并从build立目录pip删除其来源安装所需的版本。

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

更新pip到最新版本:

sudo pip install -U pip

在“virtualenv”的情况下,跳过“sudo”:

pip install -U pip

如果你的shell报告类似-bash: /usr/bin/pip: No such file or directory pip更新后-bash: /usr/bin/pip: No such file or directory

hash -d pip

现在像往常一样安装软件包:

pip install -U foo

要么

pip install foo==package.version.here

得到同样的问题更新pika 0.9.5到0.9.8。 唯一的工作方式是从tarball pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gzpip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz

尝试强制重新下载包:

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