Инструмент для определения того, какая требуется самая низкая версия Python?
-
03-07-2019 - |
Вопрос
Есть ли что-то похожее на 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 на диске, запустить скрипт с каждой из них и посмотреть, какие ошибки возникают..
Решение
Вдохновленный этим замечательным вопросом, я недавно собрал скрипт, который пытается это сделать.Вы можете найти его на github по адресу pyqver.
Он достаточно полон, но есть некоторые аспекты, которые еще не обработаны (как указано в файле README).Не стесняйтесь раскошеливаться и улучшать его!
Другие советы
На самом деле это не очень полезный ответ, но в любом случае он здесь.Я думаю, что это должно быть выполнимо (хотя, вероятно, это довольно трудоемкое упражнение), например, вы могли бы убедиться, что у вас есть все официальные грамматики для версий, которые вы хотите проверить, например этот .
Затем проанализируйте фрагмент кода, начиная с первой версии грамматики.Далее вам понадобится аналогичная карта всех встроенных пространств имен модулей и повторный анализ кода, начиная с самой ранней версии, хотя может быть сложно провести различие между встроенными модулями и модулями, которые являются внешними или чем-то промежуточным, например ElementTree .
Результатом должен быть обзор версий, поддерживающих синтаксис кода, а также обзор модулей и того, какая версия (если она вообще нужна) необходима для его использования.Получив этот результат, вы могли бы рассчитать наилучшую самую низкую и самую высокую версию.