Инструмент для определения того, какая требуется самая низкая версия Python?

StackOverflow https://stackoverflow.com/questions/804538

  •  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 .

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top