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

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上的版本字

我刚刚将我的软件包的一个新版本上传到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上的版本字符串,如图所示:

>>> 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向我指出了新版本,但在尝试升级到新版本时却找不到。我想那是一种魅力