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