我刚刚将我的包的新版本上传到 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
可以找到包的本地版本,pip
会更喜欢本地版本而不是远程版本。我什至断开了我的计算机与互联网的连接并再次尝试——当 pip
仍然成功安装了软件包,甚至没有抱怨时,来源显然是本地的。
就我而言,真正令人困惑的部分是 pip
在 pypi 上找到了较新的版本,报告了它们,然后继续并重新安装了旧版本……啊。此外,它没有告诉我它在做什么,以及为什么。
那么我是如何解决这个问题的呢?
您可以使用 -v
标志让 pip
提供详细的输出......但一个还不够。我 RTFM 编辑了帮助,它说您可以执行 -v
多次,最多 3 次,以获得更详细的输出。所以我做了:
pip install -vvv <my_package>
然后我查看了输出。一行引起了我的注意:
/tmp/pip-build-root/ 中的源代码版本为 0.0.11,满足要求
我删除了那个目录,之后 pip
从 pypi 安装了最新版本。
尝试使用以下命令再次强制下载软件包:
pip install --no-cache-dir --upgrade <package>
pip search
看到的版本较新,pip 仍会安装相同的旧版本。
pip install -e --no-cache-dir --upgrade ~/ultimate-utils/ultimate-utils-proj-src
?
感谢 Marcus Smith,他作为 pip 的维护者做出了惊人的工作,这个问题在 2013 年 7 月 23 日发布的 pip 1.4 版中得到了修复。
此版本的 changelog 中的相关信息
修复了一些与清理和不重用构建目录相关的问题(#413、#709、#634、#602 和 #939)。 (拉#865、#948)
pip install -U pip
我发现 here 在 pip 中存在一个已知错误,即如果存在包含解压缩源的构建目录,它不会检查版本。我已经在我的麻烦包上检查了这一点,并在从构建目录 pip 删除其源后安装了所需的版本。
如果您使用的是某些分发包(例如 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
将 pika 0.9.5 更新到 0.9.8 时遇到了同样的问题。唯一可行的方法是从 tarball 安装:pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz
。
在我的情况下,使用的 python 版本(3.4)不满足 Django 2.1 依赖项要求(python >= 3.5)。
对于我的情况,我必须删除主目录中的 .pip
文件夹,然后才能获得多个库的更高版本。请注意,这是在 linux 上。
pip --version
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
virtualenv --version
15.1.0
以防万一其他人在升级 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
选项的新版本。
在我的例子中,有人使用 python2 发布了最新版本的软件包,因此尝试pip3 install
它获取了一个 使用 python3 构建的旧版本。
调试时要检查的方便事项:
如果 pip install 声称找不到版本,看 pip search 是否能看到。
看看 pypi repo 上的“下载文件”部分——文件名可能表明出了什么问题(在我的例子中,我看到 -py2- 在那里很清楚)。
正如其他人所建议的那样,尝试运行 pip install --no-cache-dir 以防 pip 不打扰询问互联网,因为它已经在本地获得了您的答案。
我在 PyCharm 的 Git 选项卡下隐藏了使用 pip install .
安装的未版本控制文件,即使我在其他任何地方都看不到这些文件。
花了很长时间才找到它,发布这个希望它会帮助其他人。
就我而言,我正在 pip 安装来自 Artifactory 的 .tar.gz 包,我对其进行了很多更新。为了覆盖我缓存的 Python 文件并始终获取/安装我能够运行的最新版本:
pip install --no-cache-dir --force-reinstall <path/to/tar.gz>
您应该会看到重新下载任何必要的文件并安装这些文件,而不是使用本地缓存。
如果您需要包裹的路径,请执行 pip -v list
。使用 pip -e Why is an old version of a package of my python library installing by itself with pip -e? 时的示例见相关帖子
-vvv
而不是-v -v -v
。--no-cache-dir
标志而不是在/tmp/
中查找和删除文件。