Как узнать, является ли код обратно совместимым для Python? - PullRequest
14 голосов
/ 17 февраля 2010

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

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

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

Ответы [ 2 ]

11 голосов
/ 17 февраля 2010

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

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

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

  3. Использование чего-то вроде 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)
  • десятичное число (2,4, но может быть перенесено)
  • datetime (2.3)
  • itertools (2.3)

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

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

10 голосов
/ 17 февраля 2010

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

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

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

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