如何检查一个模块支持的 Python 版本?

4
我想知道是否有一种通用的方法可以找出你的python版本是否被特定模块支持?
例如,假设我在我的计算机上安装了python 3.11,我想要安装biopythonlru-dict模块。查看它们各自的pypi条目biopython会在其项目描述中显示以下内容:
Python要求 我们目前推荐使用来自http://www.python.org的Python 3.10版本。 Biopython当前支持和测试以下Python实现: Python 3.7、3.8、3.9、3.10和3.11 - 参见http://www.python.org。 PyPy3.7 v7.3.5或更高版本,请参见http://www.pypy.org
然而,如果我们查看lru-dict条目,他们的项目描述没有提到Python要求。最终我发现通过在他们的github页面上找到一个问题,确认了 python 3.11不受支持。

有没有更简单的方法找到这个信息?


2
PyPi页面没有Python :: 3.11分类器,因此您可以假设不支持Python 3.11。 - chepner
4
在_PyPI_项目页面上,在左侧栏(桌面视图,而非移动设备),有一个名为“Meta”的部分,在此部分中可能会有一个“Requires”字段,应该指示您想要什么。一些项目在其打包代码中记录了此字段,因此它会出现在它们的PyPI页面上(例如biopython),但是有些项目则没有(例如lru-dict)。-- 因此,对于biopython 1.81.1,我们可以看到:“Requires: Python >=3.7”。-- Trove分类器是另一种文档化此内容并出现在_PyPI_页面上的方式,但我发现它不太可靠且不太及时更新。 - sinoroc
3个回答

3

如果您访问https://pypi.org/pypi/PACKAGE_NAME/json地址,您将收到有关Python PACKAGE_NAME的完整信息,以JSON格式呈现。例如,要查看有关lru-dict的信息,请打开https://pypi.org/pypi/lru-dict/json链接,然后您可以从中提取所需的信息。

为了查看PACKAGE_NAME支持的Python版本,我编写了这段代码,希望它适合您。

import json
import pprint
from urllib import request

package_name = 'lru-dict'

with request.urlopen(f'https://pypi.org/pypi/{package_name}/json') as response:
    data = json.loads(response.read())
    pprint.pprint(data['info']['classifiers'])

输出:

 ['Development Status :: 5 - Production/Stable',
 'Intended Audience :: Developers',
 'License :: OSI Approved :: MIT License',
 'Operating System :: OS Independent',
 'Operating System :: POSIX',
 'Programming Language :: C',
 'Programming Language :: Python :: 2',
 'Programming Language :: Python :: 3',
 'Programming Language :: Python :: 3.10',
 'Programming Language :: Python :: 3.6',
 'Programming Language :: Python :: 3.7',
 'Programming Language :: Python :: 3.8',
 'Programming Language :: Python :: 3.9',
 'Programming Language :: Python :: Implementation :: CPython',
 'Topic :: Software Development :: Libraries :: Python Modules']

除了查看支持的Python版本外,您还可以获得其他信息,例如每个版本所需的Python版本、包描述、作者姓名等。


1
requires_python” 字段同样重要(如果不是更重要)。 - sinoroc

2

不,没有通用的方法。

如果库有测试,您可以运行它们并检查,但可能会出现误报和漏报 :shrug:

lru-dict在其setup.py中具有此片段,这是您可以检查支持版本的地方之一:

        'Programming Language :: C',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.7',
        'Programming Language :: Python :: 3.8',
        'Programming Language :: Python :: 3.9',
        'Programming Language :: Python :: 3.10',
        'Programming Language :: Python :: 3.11',
        'Programming Language :: Python :: Implementation :: CPython',

所以你可以看到,我认为他们不知道这个问题。


2
requires_python” 字段同样重要(如果不是更重要)。 - sinoroc

1

正如 @sinoroc 所说,检查 Python 支持的版本的方法是使用 requires_python 字段。这是包的作者指示他的包与哪些版本的 Python 兼容的方式。

任何其他检查都可以,但不是绝对的。

请参见他提供的 此链接 以了解有关 Python 版本支持的软件包元数据。

来自 Python 官方文档

requires-python 给出了您的项目支持的 Python 版本。像 pip 这样的安装程序会回溯到旧版本的软件包,直到找到一个具有匹配 Python 版本的软件包为止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接