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

时间:2013-01-31 01:46:33

标签: 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
>>>

所以不知道为什么选择安装1.1.0呢?

13 个答案:

答案 0 :(得分:79)

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

显然,如果pip可以找到包的本地版本,pip会更喜欢本地版本到远程版本。我甚至将我的计算机与互联网断开连接并再次尝试 - 当pip仍然成功安装包时,甚至没有抱怨,来源显然是本地的。

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

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

您可以使用pip标记让-v给出详细输出...但是还不够。我RTFM-ed帮助,说你可以多次执行-v次,最多3次,以获得更详细的输出。所以我做了:

pip install -v -v -v <my_package>

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

  

/ tmp / pip-build-root /中的源版本为0.0.11,满足要求&lt; my_package&gt;

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

答案 1 :(得分:24)

尝试使用以下方法再次下载该软件包:

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

答案 2 :(得分:23)

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

此版本changelog的相关信息

  

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

答案 3 :(得分:16)

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

答案 4 :(得分: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

答案 5 :(得分:4)

将pika 0.9.5更新为0.9.8也有同样的问题。唯一可行的方法是从tarball安装:pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz

答案 6 :(得分:0)

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

答案 7 :(得分:0)

在我的情况下,使用的python版本(3.4)不满足Django 2.1依赖项要求(python> = 3.5)。

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

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

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

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

答案 10 :(得分:0)

在我的情况下,有人发布了使用python2的软件包的最新版本,因此尝试pip3 install抓取了一个用python3构建的 的旧版本。

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

  • 如果pip install声称找不到该版本,请查看pip search是否可以看到它。
  • 看看pypi存储库上的“下载文件”部分-文件名可能会提示问题所在(就我而言,我看到-py2-整天都清晰可见)。
  • 按照其他人的建议,尝试运行pip install --no-cache-dir,以防pip麻烦询问互联网,因为它已经在本地提供了答案。

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

以防其他人在升级 torchtext(或可能是任何其他 torch 库)时遇到麻烦:

虽然 https://pypi.org/project/torchtext/ 声明您可以运行 pip install torchtext,但我必须通过指定 torch aka --find-links 来安装它,类似于 -f

pip install torchtext===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

让我恼火的是 PyCharm 向我指出了新版本,但在尝试升级到它时找不到它。我猜想 PyCharm 使用自己的机制来发现新版本。然后,在后台调用 pip 时,它没有找到没有 --find-links 选项的新版本。