[英]Why is pip installing an old version of my package?
我刚刚将我的 package 的新版本上传到 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
可以找到包的本地版本,则pip
会更喜欢本地版本而不是远程版本。 我什至断开了我的计算机与互联网的连接并再次尝试 - 当pip
仍然成功安装软件包并且甚至没有抱怨时,源显然是本地的。
就我而言,真正令人困惑的部分是pip
在pypi上找到了较新版本,报告了它们,然后继续并重新安装了旧版本...... arggh。 此外,它没有告诉我它在做什么,以及为什么。
那么我是如何解决这个问题的呢?
您可以使用-v
标志让pip
提供详细的输出......但一个是不够的。 我对帮助进行了 RTFM,其中说您可以多次执行-v
,最多 3 次,以获得更详细的输出。 所以我做了:
pip install -vvv <my_package>
然后我查看了输出。 有一句话引起了我的注意:
/tmp/pip-build-root/ 中的源版本为 0.0.11,满足 <my_package> 要求
我删除了那个目录,之后pip
从 pypi 安装了最新版本。
尝试使用以下命令再次强制下载软件包:
pip install --no-cache-dir --upgrade <package>
感谢Marcus Smith作为 pip 的维护者做了惊人的工作,这个问题在 2013 年 7 月 23 日发布的 pip 1.4 版中得到了修复。
此版本变更日志中的相关信息
修复了许多与清理和不重用构建目录相关的问题(#413、#709、#634、#602 和 #939)。 (拉#865、#948)
我在这里发现 pip 中存在一个已知错误,如果存在带有解压源的构建目录,它不会检查版本。 我已经在我的麻烦包上检查过这个,在从构建目录中删除它的源代码后,pip 安装了所需的版本。
如果您使用的是某些分发包(例如 Ubuntu python-pip)附带的pip
版本,则可能需要安装更新的pip
版本:
更新pip
到最新版本:
sudo pip install -U pip
在“virtualenv”的情况下,跳过“sudo”:
pip install -U pip
如果您的 shell 报告类似-bash: /usr/bin/pip: No such file or directory
after pip
update 之类的内容,则可能需要以下命令:
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
: pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz
。
就我而言,我必须删除主目录中的.pip
文件夹,然后才能获得多个库的更高版本。 请注意,这是在 linux 上。
pip --version
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
virtualenv --version
15.1.0
我发现如果您使用微版本,pip 似乎无法识别它们。 例如,我们无法升级 1.9.9.1 版本。
在我的情况下,使用的 python 版本 (3.4) 不满足 Django 2.1 依赖项要求 (python >= 3.5)。
就我而言,我正在从 Artifactory 安装一个 .tar.gz 包,我对其进行了大量更新。 为了覆盖我缓存的 Python 文件并始终获取/安装我能够运行的最新文件:
pip install --no-cache-dir --force-reinstall <path/to/tar.gz>
您应该会看到重新下载任何必要的文件并安装它们,而不是使用本地缓存。
在我的情况下,有人出版了最新版本python2一包的,因此试图pip3 install
它抓住的是已经建成与python3旧版本。
调试时要检查的方便事项:
pip install
声称找不到版本,看看pip search
是否可以看到。-py2-
那里很清楚)。pip install --no-cache-dir
以防 pip 不费心询问互联网,因为它已经在本地有了您的答案。我在 PyCharm 的 Git 选项卡下隐藏了未版本控制的文件,这些文件是通过pip install .
即使我在其他任何地方都没有看到这些文件。
找了好久才找到,贴出来希望能帮到别人。
以防万一其他人在升级火炬文本(或可能是任何其他torch
库)时遇到麻烦:
尽管https://pypi.org/project/torchtext/声明您可以运行pip install torchtext
我必须通过指定--find-links
aka -f
来安装它--find-links
torch
:
pip install torchtext===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
令我恼火的是 PyCharm 将我指向新版本,但在尝试升级到它时找不到它。 我猜想 PyCharm 使用自己的机制来发现新版本。 然后,当在--find-links
调用pip
时,它没有找到没有--find-links
选项的新版本。
如果您需要 package 的路径,请执行pip -v list
。 使用 pip -e 时的示例见相关帖子为什么我的 python 库的 package 的旧版本是使用 Z682AD1C2A456D8Z 自行安装的?
10 年过去了, pip
仍然无法按预期工作。
我现在浪费了几个小时的头撞墙试图找出为什么pip
不会安装我的 package 的开发版本。 In my case, there are versions 0.0.4
and 0.0.5.dev1
in a private gitlab.com package registry (hence the --extra-index-url
argument below), but I believe that's not relevant to the problem.
按照这个页面上的很多建议,我在一个很远的文件夹中创建了一个测试venv,清除pip缓存,卸载有问题的package等,首先排除最常见的问题:
$ pip cache purge && \
pip uninstall --yes my-package && \
pip install --extra-index-url "https://_:${GITLAB_PASSWORD_TOOLS_VAULTTOOLS}@gitlab.com/api/v4/projects/<project-id>/packages/pypi/simple" \
--no-cache-dir \
--pre \
--upgrade my-package
output(使用空行分隔 output 用于命令):
WARNING: No matching packages
Files removed: 0
Found existing installation: my-package 0.0.4
Uninstalling my-package-0.0.4:
Successfully uninstalled my-package-0.0.4
Looking in indexes: https://pypi.org/simple, https://_:****@gitlab.com/api/v4/projects/<project-id>/packages/pypi/simple
Collecting my-package
Downloading https://gitlab.com/api/v4/projects/<project-id>/packages/pypi/files/f07 ... 397/my_package-0.0.5.dev1-py3-none-any.whl (16 kB)
Downloading https://gitlab.com/api/v4/projects/<project-id>/packages/pypi/files/775 ... 70e/my_package-0.0.4-py3-none-any.whl (16 kB)
...
Successfully installed my-package-0.0.4
所以pip
确实看到了 dev package 版本,但仍然选择了较早的版本。
为了弄清楚发生了什么,我发布了一个0.0.5
版本:错误仍然存在, pip
看到所有三个版本,但仍然安装0.0.4
。
在进一步的、越来越绝望的尝试中,我从 gitlab.com package 注册表中删除了0.0.5*
之前的所有版本。
只是现在, pip
才会费心实际显示一些有用的信息:
$ (same command as above)
... (similar output as above) ...
ERROR: Cannot install my-package==0.0.5 and my-package==0.0.5.dev1 because these package versions have conflicting dependencies.
The conflict is caused by:
my-package 0.0.5 depends on my-other-package<0.2.5 and >=0.2.4
my-package 0.0.5.dev1 depends on my-other-package<0.2.5 and >=0.2.4
To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict
ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
好的,所以我的 package 依赖项有问题。 谢谢你让我知道。
说真的 - 我使用各种pip... -vvv
和/或固定版本(例如my-package==0.0.5.dev1
)努力了几个小时 - 但我没有设法得到任何有用的 output pip
- 直到我从我的 package 注册表中擦除整个历史记录。
希望这至少可以帮助处于相同情况的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.