98

我刚刚将我的包的新版本上传到 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 吗?

4

14 回答 14

104

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

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

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

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

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

pip install -vvv <my_package>

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

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

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

于 2013-06-17T18:09:27.747 回答
51

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

pip install --no-cache-dir --upgrade <package>
于 2017-05-16T18:18:53.403 回答
25

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

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

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

于 2013-08-07T14:22:25.823 回答
17

我在这里发现pip 中有一个已知的错误,如果有一个带有未打包源的构建目录,它不会检查版本。我已经在我的麻烦包上检查了这一点,并在从构建目录 pip 删除其源后安装了所需的版本。

于 2013-03-03T19:25:42.913 回答
11

如果您使用的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
于 2014-02-25T12:16:29.883 回答
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.

于 2013-02-22T16:40:24.620 回答
2

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

于 2018-09-25T21:48:51.457 回答
1

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

pip --version
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
virtualenv --version
15.1.0
于 2018-10-26T23:02:37.683 回答
1

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

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

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

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

于 2020-12-26T17:06:27.977 回答
0

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

于 2018-07-11T20:31:12.723 回答
0

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

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

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

于 2019-11-15T15:36:26.957 回答
0

在我的例子中,有人用 python2 发布了一个包的最新版本,所以试图pip3 install抓住一个用 python3 构建的旧版本

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

  • 如果pip install声称无法找到版本,请查看是否pip search可以看到它。
  • 看看 pypi repo 上的“下载文件”部分——文件名可能表明出了什么问题(在我的例子中,我看到-py2-那里很清楚)。
  • 正如其他人所建议的那样,尝试运行pip install --no-cache-dir以防 pip 不打扰询问互联网,因为它已经在本地获得了您的答案。
于 2020-04-03T05:13:03.643 回答
0

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

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

于 2020-06-11T19:48:43.313 回答
0

如果您需要包裹的路径,请执行pip -v list. 使用 pip -e 时的示例见相关帖子 为什么我的 python 库的旧版本的包是使用 pip -e 自行安装的?

于 2021-09-23T17:17:55.137 回答