ChatGPT解决这个技术问题 Extra ChatGPT

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

我刚刚将我的包的新版本上传到 PyPi (1.2.1.0-r4):我可以下载 egg 文件并使用 easy_install 安装它,并且版本正确检查。但是当我尝试使用 pip 安装时,它会安装 1.1.0.0 版本。即使我使用 pip install -Iv tome==1.2.1.0-r4 明确指定要 pip 的版本,我也会收到以下消息: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 freeze 软件包 tome==1.2.1.0-r4
它可能还在你的路径中的某个地方?用 -U 试试
嗯..好吧,这很有趣。我试过用 pip 卸载它,我想我得再挖掘一些,确保它都消失了。感谢您的检查!
看起来像点子中的某种错误。我有类似的问题,但我无法安装旧版本的 django-tastypie。
相关,我在 pip install -e stackoverflow.com/questions/69303363/… 上遇到了类似的问题

B
Ben Watson

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

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

就我而言,真正令人困惑的部分是 pippypi 上找到了较新的版本,报告了它们,然后继续并重新安装了旧版本……啊。此外,它没有告诉我它在做什么,以及为什么。

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

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

pip install -vvv <my_package>

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

/tmp/pip-build-root/ 中的源代码版本为 0.0.11,满足要求

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


看起来这个问题还没有解决。
@Ale110 已修复 - 有关详细信息,请参阅我的答案。
仅供参考,您可以使用 -vvv 而不是 -v -v -v
您也可以使用 --no-cache-dir 标志而不是在 /tmp/ 中查找和删除文件。
在我的机器上进行 pip 安装需要很长时间......我如何找到这些文件的位置?我可以在 pip 列表中看到它,但它没有指向路径。有什么帮助吗?
I
Iacchus

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

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

这对我有用。终于在 v0.2.1 上安装了 v0.4 的 photoutils。 Pip 正在下载 v0.4 tar,但它只会安装(或保留)v0.2.1。 --no-cache-dir 和 --upgrade 标志终于做到了!谢谢
这是正确的答案。默认情况下,Pip 将相关 Pypi 页面的缓存保留 600 秒。因此,即使您删除了本地缓存的包,您也必须等待 10 分钟让 pip 获取包含所有新版本链接的新页面。
这似乎是一个非常合乎逻辑的答案。但是,即使我通过 pip search 看到的版本较新,pip 仍会安装相同的旧版本。
尝试检查它是否与virtualenv有关。啊python版本。
这是否适用于可编辑模式,例如 pip install -e --no-cache-dir --upgrade ~/ultimate-utils/ultimate-utils-proj-src
P
Piotr Dobrogost

感谢 Marcus Smith,他作为 pip 的维护者做出了惊人的工作,这个问题在 2013 年 7 月 23 日发布的 pip 1.4 版中得到了修复。

此版本的 changelog 中的相关信息

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


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

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


谢谢提供信息。知道我应该在哪里查找构建目录吗?我尝试从 Python\Lib\site-packages 中删除它,但结果是一样的。我没有从包存在的位置或任何地方执行命令。
@sh1ftst0rm 我在 linux 下使用 virtualenv,对于 django-tastypie,它是:“$VIRTUAL_ENV/build/django-tastypie”。尝试检查 Python 目录的顶部或仅在系统中使用搜索。您也可以尝试使用“pip install -b ”。
这似乎不是我的问题,我进行了广泛搜索,在我的系统上找不到任何包的痕迹或构建目录。它一定是 pip =( 中的其他错误。无论如何,这是一个很好的提示,我相信这将是很多人的修复。
j
jkmartindale

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

pip 更新到最新版本:

sudo pip install -U pip

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

pip install -U pip

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

hash -d pip

现在像往常一样安装你的包:

pip install -U foo

或者

pip install foo==package.version.here

R
Ruth

将 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,所以当我尝试安装时,它只会得到以前的版本。这并不能解决我最初的问题,但了解它会有所帮助。
A
Alberto Chiusole

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


N
NateW

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

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

T
Tobias Uhmann

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

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

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

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


m
mlissner

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


可能是因为“1.9.9.1”与 SemVer 不兼容,请参阅 semver.org
j
jarekwg

在我的例子中,有人使用 python2 发布了最新版本的软件包,因此尝试pip3 install它获取了一个 使用 python3 构建的旧版本。

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

如果 pip install 声称找不到版本,看 pip search 是否能看到。

看看 pypi repo 上的“下载文件”部分——文件名可能表明出了什么问题(在我的例子中,我看到 -py2- 在那里很清楚)。

正如其他人所建议的那样,尝试运行 pip install --no-cache-dir 以防 pip 不打扰询问互联网,因为它已经在本地获得了您的答案。


M
Mandera

我在 PyCharm 的 Git 选项卡下隐藏了使用 pip install . 安装的未版本控制文件,即使我在其他任何地方都看不到这些文件。

花了很长时间才找到它,发布这个希望它会帮助其他人。


j
jkmartindale

就我而言,我正在 pip 安装来自 Artifactory 的 .tar.gz 包,我对其进行了很多更新。为了覆盖我缓存的 Python 文件并始终获取/安装我能够运行的最新版本:

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

您应该会看到重新下载任何必要的文件并安装这些文件,而不是使用本地缓存。


C
Charlie Parker

如果您需要包裹的路径,请执行 pip -v list。使用 pip -e Why is an old version of a package of my python library installing by itself with pip -e? 时的示例见相关帖子