Инструмент, чтобы определить, какая нижняя версия Python требуется? - PullRequest
47 голосов
/ 30 апреля 2009

Есть ли что-то похожее на Pylint, которое будет смотреть на скрипт Python (или запускать его) и определять, какую версию Python требует каждая строка (или функция)?

Например, теоретическое использование:

$ magic_tool <EOF
with something:
    pass
EOF
1: 'with' statement requires Python 2.6 or greater

$ magic_tool <EOF
class Something:
    @classmethod
    def blah(cls):
        pass
EOF
2: classmethod requires Python 2.2 or greater
$ magic_tool <EOF
print """Test
"""
EOF
1: Triple-quote requires Python 1.5 of later

Возможна ли такая вещь? Я полагаю, что самым простым способом было бы иметь все версии Python на диске, запустить сценарий с каждой из них и посмотреть, какие ошибки происходят ..

Ответы [ 2 ]

42 голосов
/ 04 мая 2009

Вдохновленный этим прекрасным вопросом, я недавно написал сценарий, который пытается это сделать. Вы можете найти его на github на pyqver .

Это достаточно полно, но есть некоторые аспекты, которые еще не обработаны (как указано в файле README). Не стесняйтесь раскошелиться и улучшить его!

8 голосов
/ 30 апреля 2009

Не очень полезный ответ, но он все равно идет. Я думаю, что это должно быть выполнимо (хотя, вероятно, это довольно упражнение), например, вы можете убедиться, что у вас есть все официальные грамматики для версий, которые вы хотите проверить, например эта .

Затем проанализируйте бит кода, начиная с первой версии грамматики. Затем вам понадобится аналогичная карта всех пространств имен встроенных модулей и снова проанализируйте код, начиная с самой ранней версии, хотя может быть сложно различить встроенные модули и внешние модули или что-то среднее между ними, как ElementTree.

Результатом должен быть обзор версий, поддерживающих синтаксис кода, а также обзор модулей и какой версии (если она вообще необходима) для ее использования. С этим результатом вы можете рассчитать лучшую низшую и наивысшую версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...