Python — служебная программа для проверки доступности модуля

#python #python-3.x

#python #python-3.x

Вопрос:

Существует ли служебная программа командной строки (желательно), в которой перечислены все major версии python, поставляемые в комплекте с определенным модулем в библиотеке этой версии?

Например json , модуль доступен только в версиях 2.6

Поэтому при запуске этой утилиты должен отображаться:

 2.6
2.7
.. and the 3.x versions
 

Комментарии:

1. Вы имеете в виду список модулей в стандартной библиотеке для каждой версии?

2. Нет, я хочу обратное. Для данного модуля укажите, в каких версиях python он есть.

Ответ №1:

Такой встроенной команды нет.

Если подключение к Интернету не является проблемой, вы можете просто проверить URL по адресу https://docs.python.org/<version-number>/library/<module-name>.html :

 from urllib.request import urlopen
from urllib.error import HTTPError


def has_module(version, module_name):
    try:
        urlopen('https://docs.python.org/{}/library/{}.html'.format(version, module_name))
    except HTTPError as e:
        if e.code == 404:
            return False
        raise e
    return True
 

Пример использования:

 In [2]: has_module('2.7', 'asyncio')
Out[2]: False

In [3]: has_module('3.3', 'asyncio')
Out[3]: False

In [4]: has_module('3.4', 'asyncio')
Out[4]: True
 

Должна выполняться на python3, но версию python2 написать несложно.

Если вам нужен автономный инструмент, вы всегда можете проанализировать страницу https://docs.python.org/<version-number>/library/index.html и получить список страниц модуля для этой версии python, а затем просто создать dict , который сопоставляет версию python с набором доступных модулей.

Комментарии:

1. Что, если вы получите сообщение об ошибке сервера? например, тогда код не будет равен 404, и функция вернет true .

2. @Marichyasana Функция не возвращает true. Это просто вызывает ошибку (это то, что raise e делает). При использовании этой функции вы должны проверить наличие других ошибок и просто напечатать «server down» или что-то в этом роде. Это недостаток решения, которое зависит от подключения к Интернету…