Как проверить совместимость кода для Python?

У меня есть код, который я пытаюсь заставить его хорошо играть с геопроцессором ESRI. Однако геопроцессор ESRI работает на Python 2.2, 2.3, 2.4, 2.5. Нам нужно, чтобы наши инструменты работали над любой версией. Поэтому я потратил много времени на работу и кодирование обходных решений для разных версий, так что геопроцессор обертки имеет одинаковые функциональные возможности для всех версий.

Теперь вот большая вещь, есть ли какое-то приложение, которое может в основном сканировать модули, чтобы проверить, совместимы ли его синтаксис и методы с предыдущей версией Python?

К сожалению, я не могу установить Python 2.2, так как у меня есть Arcgis 9.3, для которого требуется Python 2.5. И наоборот, я получил почти все зависимостей модулей, отсортированных и разработанных. (win32com, ctypes и т.д.).

Но я беспокоюсь о своем фактическом коде, я мог бы потратить часы и прочитать, какие ключевые слова были добавлены для какой версии и т.д., однако в основном это будет огромная головная боль. Есть ли какое-то приложение, которое делает эти вещи?

Ответы

Ответ 1

Если вы активно разрабатываете коммерческий продукт, и вы - действительно хотите поддерживать все эти версии должным образом, я бы предложил:

  • Написание автоматизированного набора тестов, который можно запускать и тестировать для всей библиотеки/приложения/независимо.

  • Настройка машины или, в идеале, виртуальной машины для каждой тестовой среды (python 2.2-2.6 и любые комбинации платформ, если ваш продукт не только win32). Это особенно легко сделать в настоящее время, учитывая, что сейчас есть несколько бесплатных продуктов виртуализации (VirtualBox и VMWare Server, чтобы назвать два)

  • Используя что-то вроде buildbot, чтобы автоматизировать тестирование на всех других платформах и собирать результаты.

Я мог бы отметить, однако, что произошли значительные изменения между 2.2 и 2.3, и снова между 2.3 и 2.4. Вот почему большинство библиотек python там поддерживают только 2.3, а число движется только до версии 2.4 и выше.

В каждом главном выпуске есть документ "Что нового в python 2.x", но кодировка для версии 2.2 означает, что вы пропустите:

  • Генераторы (2.3) (ну, на самом деле, вы можете получить их в 2.2 с помощью from __future__ import generators)
  • Выражения генератора (2.4)
  • модуль подпроцесса (2.4)
  • Синтаксис декоратора (2.4)
  • множества (2.3)
  • decimal (2.4, но может быть обращено)
  • datetime (2.3)
  • itertools (2.3)

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

Вы должны действительно подумать о том, насколько сильно вы хотите поддержать 7-летнюю версию python, и пропустите множество интересных функций, которые могут уменьшить размер вашего кода (или, возможно, просто повысить читаемость).

Ответ 2

Попробуйте pyqver: https://github.com/ghewgill/pyqver/

Дает минимальную версию для данного python script, анализируя используемые ключевые слова и модули.

Кроме того, вы можете скомпилировать локальный python 2.2 и использовать virtualenv для создания среды python 2.2 с помощью флага -python.