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