Будущее развитие в Python 2.4 - PullRequest
       40

Будущее развитие в Python 2.4

2 голосов
/ 08 октября 2011

Я начинаю новый проект на Python, который нацелен в первую очередь на машины RHEL5, которые могут быть обновлены до RHEL6 через пару лет.Учитывая, что python 2.4 является стандартным для RHEL5, и системные администраторы не будут поддерживать больше, чем они должны, получение python 2.6 в нашем локальном репо займет некоторое убедительное впечатление.Хотя кажется, что с Python 2.4 у меня все в порядке, я чувствую неосторожность при создании проекта с нуля, нацеленного на 100% совместимость с такой старой версией.

Должен ли я бороться за выполнение этого проектав 2.6 или стремиться к самому гладкому соответствию с RHEL5?Какие подводные камни мне следует знать, если я буду придерживаться версии 2.4?

К вашему сведению: я определенно буду использовать sqlite и pygtk.

Ответы [ 5 ]

2 голосов
/ 08 октября 2011

Лучше всего придерживаться 2.4 и иметь модуль time_machine со всеми вкусностями, которые есть у последующих питонов, которые вы хотите.Например, когда свойства впервые появились, вы должны были сделать что-то вроде:

def _get_prop(self):
    return self._prop
def _set_prop(self, value):
    self._prop = value
prop = property(_get_prop, _set_prop)

, но в 2.6 они улучшили свойства и стали самими декораторами, поэтому вы могли написать:

@property
def prop(self):
    return self._prop
@prop.setter
def prop(self, value):
    self._prop = value

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

Мне очень нравится эта функция, поэтому мой time_machine.py имеет код, подобный следующему:

# 2.6+ property for 2.5-
if sys.version_info[:2] < (2, 6):
    # define our own property type
    class property():
        "2.6 properties for 2.5-"
        def __init__(self, fget=None, fset=None, fdel=None, doc=None):  ...
        def __call__(self, func):  ...
        def __get__(self, obj, objtype=None):  ...
        def __set__(self, obj, value):  ...
        def __delete__(self, obj):  ...
        def setter(self, func):  ...
        def deleter(self, func):  ...

ДействительноХорошая часть этого заключается в том, что эквиваленты Python часто используются для демонстрации новой функциональности, поэтому вам даже не нужно писать код самостоятельно.

2 голосов
/ 08 октября 2011
1 голос
/ 08 октября 2011

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

1 голос
/ 08 октября 2011

Что нового в 2,5 , 2,6 , 2,7 .Кроме того, стандартная библиотека документов, когда были добавлены определенные функции.Например, форматирование строки было добавлено в 2.6 .Поддержка сторонних библиотек может быть хитрой.

0 голосов
/ 08 октября 2011

Считай, что тебе повезло - в прошлый раз, когда я делал настоящую работу с Python, мне нужно было стремиться к Python 1.5.2, потому что это был самый большой общий знаменатель, доступный в системах RHEL, на которые мы нацеливались. Надеемся, что все эти системы уже переведены на новые инструменты.

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

...