为什么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.gz
: pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz
。
尝试强制重新下载包:
pip install --no-cache-dir --upgrade <package>