让pythonpip找出要下载的正确包版本

让pythonpip找出要下载的正确包版本,python,pip,distutils,Python,Pip,Distutils,这个问题我已经遇到好几次了。基本上,在工作中,我们在windows上使用旧版本的python(2.5),并且经常在我这样做时,例如pip install zope.interfacepip总是下载最新版本的包,无论我的python版本是否支持该包。因此,上面的示例将进行下载,尽管PKG-INFO没有将python2.5列为受支持的版本,因此我得到了一个安装错误 File "C:\Users\jamaam\build\zope.interface\setup.py", line 42 exce

这个问题我已经遇到好几次了。基本上,在工作中,我们在windows上使用旧版本的python(2.5),并且经常在我这样做时,例如
pip install zope.interface
pip总是下载最新版本的包,无论我的python版本是否支持该包。因此,上面的示例将进行下载,尽管PKG-INFO没有将python2.5列为受支持的版本,因此我得到了一个安装错误

  File "C:\Users\jamaam\build\zope.interface\setup.py", line 42
except DistutilsPlatformError as e:
我希望pip更加智能化,安装python版本(在本例中)支持的包的最高版本,并可能警告此包不是最新版本,而无需搜索interweb在我的环境中手动查找可安装版本

有没有办法这样做

这里是PKG-INFO的一些内容,显然没有列出python2.5

381 Classifier: Operating System :: OS Independent
382 Classifier: Programming Language :: Python :: 2.6
383 Classifier: Programming Language :: Python :: 2.7
384 Classifier: Programming Language :: Python :: 3
385 Classifier: Programming Language :: Python :: 3.2
386 Classifier: Topic :: Software Development :: Libraries :: Python Modules

没有;没有元数据可以进行这样的调用,因此没有任何
pip
(或任何其他工具)可以用来确定包的哪个版本可以与您的python版本一起使用

您唯一的选择是在安装时使用版本pin:

pip install -I zope.interface==3.8.0
注意那里的
-I
开关;由于您已尝试安装最新版本,因此可能需要忽略任何已安装的版本以强制降级


请注意,Trove python版本分类器(
分类器:编程语言::python::*
)不能用于此任务;如果开发人员记得这样做,它们将由开发人员设置,但不能在以后进行更新以指示与新python版本的兼容性。它们应该被视为帮助优化PyPI和其他包索引搜索的一种方式,而不是安装程序使用的元数据。

我不同意你的观点,我在问题中添加了PKG-INFO片段,以显示支持的版本的列表。@Meitham:Trove分类器不可靠,仅用于UI使用。一方面:依赖分类器将排除未来的python版本,而包在该版本上可以正常工作。但是pip仍然会解析文件以查找“Requires”指令。如果
分类器
不是一个标准,那么我应该建议添加一个
语法
指令,该指令具有较低版本和较高版本。所以在zope.interface中应该是
语法:2.6::3.2
,但是如果3.4出现了,它也兼容呢?你不能回头更新你包中的信息,你已经发布了。此外,关键是现在没有这样的元数据。是的,我将研究debian如何处理依赖项和版本。同时,谢谢,我已经接受了你的回答。