Python 为什么pip要安装我的包的旧版本?
我刚刚将我的软件包的一个新版本上传到PyPi(1.2.1.0-r4):我可以下载egg文件并使用easy_install进行安装,并且版本检查正确。但当我尝试使用pip安装时,它会安装1.1.0.0版。即使我使用Python 为什么pip要安装我的包的旧版本?,python,pip,setuptools,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明确指定了pip的版本,我也会收到这样一条消息:请求了tome==1.2.1.0-r4,但是安装了1.1.0.0版,但我不明白为什么 我用parse_version仔细检查并确认1.2.1上的版本字符串大于1.1.0上的版本字
pip install-Iv tome==1.2.1.0-r4
明确指定了pip的版本,我也会收到这样一条消息:请求了tome==1.2.1.0-r4,但是安装了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
>>>
>>从pkg\u资源导入parse\u版本作为pv
>>>pv('1.1.0.0')>>
你知道为什么选择安装1.1.0吗?同样的问题是,pika 0.9.5升级到0.9.8。唯一的工作方式是从tarball安装:
pip安装https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz
我发现pip中存在一个已知错误,即如果存在包含未打包源代码的生成目录,它将不会检查版本。我已经在我麻烦的软件包上检查了这个问题,从构建目录中删除了它的源代码后,pip安装了所需的版本。这是一个很好的问题。我花了很长时间才弄明白。这是适合我的解决方案:
显然,如果pip
可以找到包的本地版本,pip
将更喜欢本地版本而不是远程版本。我甚至把我的电脑从互联网上断开,然后再试一次——当pip
仍然成功地安装了软件包,甚至没有抱怨,显然是本地的
在我的例子中,真正令人困惑的是,pip
在上找到了较新的版本,报告了它们,然后继续重新安装了较旧的版本。。。啊。而且,它没有告诉我它在做什么,为什么
那么我是如何解决这个问题的呢
您可以使用-v
标志获取pip
以提供详细输出。。。但一个是不够的。我RTFM编辑了帮助,它说您可以多次执行-v
,最多3次,以获得更详细的输出。所以我做了:
pip install -vvv <my_package>
pip安装-vvv
然后我查看了输出。有一句话引起了我的注意:
/tmp/pip build root/中的源代码版本为0.0.11,满足要求
我删除了该目录,之后,pip
安装了pypi的最新版本。多亏了作为pip维护者所做的出色工作,这在2013年7月23日发布的pip版本1.4中得到了修复
来自此版本的的相关信息
修复了与以下内容相关的一些问题(#413、#709、#634、#602和#939)
清理和不重用生成目录。(拉力#865,#948)
如果您使用的是一些发行包附带的
pip
版本(例如Ubuntu python pip),则可能需要安装更新的pip
版本:
将pip更新至最新版本:
sudo-pip安装-U-pip
如果是“virtualenv”,则跳过“sudo”:
pip安装-U pip
如果您的shell报告类似于-bash:/usr/bin/pip:在pip
更新之后没有这样的文件或目录,则可能需要以下命令:
hash-dpip
现在像往常一样安装软件包:
pip安装-U foo
或
pip install foo==package.version。在此处
尝试使用以下命令再次强制下载软件包:
pip install --no-cache-dir --upgrade <package>
pip安装--无缓存目录--升级
我发现,如果使用微版本,pip似乎无法识别它们。例如,我们无法升级版本1.9.9.1 在我的例子中,使用的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
在我的例子中,我正在安装Artifactory中的.tar.gz包,我对它进行了很多更新。为了覆盖缓存的Python文件并始终抓取/安装最新版本,我可以运行:
pip安装--无缓存目录--强制重新安装
您应该会看到这样的情况:重新下载所有必要的文件并安装它们,而不是使用本地缓存。在我的例子中,有人发布了使用python2的最新版本的软件包,因此试图pip3安装时,它捕获了使用python3构建的旧版本
调试时要检查的方便事项:
- 如果
pip install
声称无法找到该版本,请查看pip search
是否可以看到它
- 看看pypi repo上的“下载文件”部分——文件名可能会提示出问题所在(在我的例子中,我看到
-py2-
的内容非常清楚)
- 正如其他人所建议的,试着运行
pip安装--no cache dir
,以防pip因为已经在本地找到了您的答案而懒得问互联网
我在PyCharm的Git选项卡下隐藏了未版本化的文件,这些文件是通过pip install安装的。
即使我在其他地方没有看到这些文件
我花了很长时间才找到它,发布这篇文章是希望它能帮助其他人。以防其他人在升级torchtext时遇到麻烦(或者可能是任何其他torch
库):
虽然声明您可以运行pip安装torchtext
但我必须通过指定--find links
aka-f
来安装它,与torch
类似:
pip install torchtext===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
让我恼火的是,PyCharm向我指出了新版本,但在尝试升级到新版本时却找不到。我想那是一种魅力