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

bri*_*rns 71 python pip setuptools

我刚刚将我的软件包的新版本上传到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
>>>
Run Code Online (Sandbox Code Playgroud)

所以任何想法为什么选择安装1.1.0而不是?

Mat*_*ick 83

这是一个很好的问题.我花了很长时间才弄明白.这是适用于我的解决方案:

显然,如果pip可以找到本地版本的软件包,pip则更喜欢本地版本的远程版本.我甚至将我的电脑从互联网上断开并再次尝试 - 当pip仍然成功安装包装,甚至没有抱怨时,来源显然是本地的.

在我的案例中,真正令人困惑的部分是pippypi上找到了新版本,报告了它们,然后继续重新安装了旧版本...... arggh.此外,它没有告诉我它在做什么,为什么.

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

您可以pip使用-v标志来提供详细输出......但是还不够.我RTFM-ed帮助,说你可以做-v多次,最多3次,以获得更详细的输出.所以我做了:

pip install -vvv <my_package>
Run Code Online (Sandbox Code Playgroud)

然后我查看了输出.一条线引起了我的注意:

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

我删除了该目录,之后pip安装了pypi的最新版本.

  • 仅供参考,您可以使用`-vvv`而不是`-v -v -v`. (5认同)
  • 你也可以使用`--no-cache-dir`标志而不是在`/ tmp /`中搜索和删除文件. (2认同)

Iac*_*hus 30

尝试使用以下命令再次下载该软件包:

pip install --no-cache-dir --upgrade <package>
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.Pip默认保留相关Pypi页面的缓存600秒.因此,即使您删除本地缓存的软件包,也必须等待10分钟才能获取包含所有新版本链接的新页面. (2认同)
  • 这似乎是一个非常合乎逻辑的答案。然而,pip 仍然安装相同的旧版本,即使我通过“pip search”看到的版本更新。 (2认同)

Pio*_*ost 24

感谢Marcus Smith,他作为pip的维护者做了出色的工作,这是在2013年4月23日发布的pip版本1.4中修复的.

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

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

  • 这应该标记为正确的答案.像这样升级点:```pip install -U pip``` (4认同)
  • 此修复程序仍然没有使用缓存版本静默解决 pip,这可以使用 Iacchus 的答案解决 (2认同)
  • 不,它似乎没有被修复。我现在遇到了同样的问题。 (2认同)

sim*_*izz 16

我在这里发现pip中存在一个已知错误,如果有一个包含解压缩源的构建目录,它将不会检查版本.我已经在麻烦的包上检查了这个,并在从build目录pip中删除了它后安装了所需的版本.

  • 谢谢你的信息.知道我应该在哪里寻找构建目录吗?我尝试从Python\Lib\site-packages中删除它,但结果是一样的.我没有从包存在的位置或任何地方执行命令. (2认同)

小智 8

如果您使用的pip是某些发行包附带的版本(例如Ubuntu python-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:

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.

  • +1 谢谢,这让我明白了一些重要的事情:pip 依赖于源代码分发:在我的最新版本中,我忘记上传源代码 dist,所以当我尝试安装时,它只会获得以前的版本。这并不能解决我原来的问题,但知道它是有帮助的。 (2认同)