Как проверить версию Python, которую поддерживает модуль?

Мне интересно, есть ли общий способ узнать, поддерживается ли ваша версия python определенным модулем?

Например, допустим, что у меня на компьютере установлен python 3.11 и я хочу установить модули biopython и lru-dict. Переход к соответствующим pypi записям biopython показывает это в их Project description:

Требования Python

В настоящее время мы рекомендуем использовать Python 3.10 с http://www.python.org

В настоящее время 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 , их Project description не упоминает требования Python. В конце концов я узнал, что python 3.11 не поддерживается, найдя проблему на их github странице.

Есть ли более простой способ узнать эту информацию?

🤔 А знаете ли вы, что...
С Python можно создавать ботов для социальных сетей и мессенджеров.


3
287
3

Ответы:

Решено

Нет, универсального способа нет.

Если в библиотеке есть тесты, вы можете запустить их и проверить, но они могут давать как ложные срабатывания, так и ложноотрицательные :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',

Как видите, я не думаю, что они знали об этой проблеме.


Если вы перейдете по адресу https://pypi.org/pypi/PACKAGE_NAME/json, вы получите полную информацию о Python PACKAGE_NAME в формате JSON. Например, для просмотра информации о lru-dict откройте ссылку https://pypi.org/pypi/lru-dict/json, далее из нее можно извлечь нужную информацию.

Чтобы увидеть версию Python, которую поддерживает PACKAGE_NAME, я написал этот код, надеюсь, он вам подойдет.

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, необходимая для каждого выпуска, описание пакета, имя автора и т. д.


Как сказал @sinoroc, способ проверить поддерживаемые версии Python — использовать поле requires_python. таким образом автор пакета указывает, с какими версиями Python работает его пакет. Любая другая проверка хороша, но не определена.

см. эту ссылку, которую он предоставил, чтобы понять метаданные пакета, касающиеся поддержки версии Python.

из официальной документации Python

require-python предоставляет версии Python, поддерживаемые вашим проект. Установщики, такие как pip, просматривают более старые версии пакеты, пока не найдет тот, который имеет соответствующую версию Python.


Интересные вопросы для изучения