python2.6 on debian/lenny

Есть в debian/lenny такой недостаток — отсутствие python2.6. Вроде ерунда — 2.6 есть в “experimental”. Чтобы сделать его по умолчанию, не вводить python2.6 при каждом запуске, и избежать “расслоения” уже работающего софта — нужно еще пройтись по этому руководству. И что? Правильно, встанет следующая проблема, особенно актуальная если у вас на этом сервере уже крутятся работающие сервисы. Проблема называется “Глобальные библиотеки”. Стандартные и не очень.

После смены python по умолчанию, придется еще сидеть над логами всех сервисов, ничего не упустить и установить нужные библиотеки. Даже если служб меньше десятка — вялотекущая ловля граблей может происходить несколько недель. Ни сна, ни покоя, тем более, что в самом “experimental” библиотек под 2.6 не так уж много. Устанавливать глобальные библиотеки из distutils опять таки — некошерно. Глобальными библиотеками на productive сервере должна заниматься система контроля дистрибутивов ОС, это мое мнение.

На этом этапе рассуждений, мой переезд в 2.6 имел все шансы прекратится, если бы не тот факт, что 2.6 полностью совместима с 2.5. Значит достаточно переспросить у 2.5 где он берет свои глобальные библиотеки и запихнуть эти библиотеки в PATH для 2.6.

Для таких задач есть специальный пусковой файл /etc/python2.6/sitecustomize.py — этот файл выполняется при каждом запуске python.

В него (с Богом, помолясь) добавляется такой потенциальный генератор граблей:

import pickle
import commands
libs2_5_cmd = 'python2.5 -c "import sys; import pickle; print >>sys.stdout, pickle.dumps(sys.path)"'
try:
    py2_5_libs = pickle.loads(commands.getoutput(libs2_5_cmd))
    sys.path.extend(py2_5_libs)
except Exception, e:
    import warnings
    warnings.warn("Attempt to load libs from python2.5 failed with error \n%s\nDebug file '%s' to resolve this"%\
                             (e, __file__))

Во избежание, пути для 2.5 добавляются в конец. Если верить в то, что приложения будут добавлять свои локальные библиотеки в начало — проблем быть не должно.

С этого момента все библиотеки под Python2.5 будут находится интерпретатором Python2.6, и можно начинать не торопясь принимать взвешенные решения.

Add post to: Delicious Reddit Slashdot Digg Technorati Google
(already: 1) Comment post

Comments

No comments for this post

Required. 30 chars of fewer.

Required.