Нейросети и Интернет :: Продукты :: О пакете Python в дистрибутивах AltLinux

Главная

   Новости

   Публикации

   Продукты

   О нас

   Задайте ваш вопрос

Продукты

   Python Policy

   rPAS

   Zope

   Zope

   IIGFS

Ссылки

   Личные сервисы

   Поисковые сервисы

   Скачать!

   Баги

   Демо IIGFS

   Разработка rPAS

 

^Python Policy^ | ЧАВО>>

Python-Policy

  печать |  2004-06-29 03:33:17

Python-Policy описывает рекомендуемый способ оформления и поддержки компонент языка Python и продуктов, реализованных с его помощью в дистрибутивах Alt Linux. Этот способ поддерживается скриптами и макросами RPM и его исполльзование дает некоторые удобства в поддержке пакетов, а также некоторые гарантии того, что этот пакет будет реально работать после установки.

Краткое описание жизненного цикла питона в репозитории

Жизненный цикл с точки зрения мантейнеров :

  1. В любой момент времени существует единственный основной пакет python - пакет с именем python;
  2. В день выхода новой минорной версии python (X.Y), делается форк: новая версия собирается под именем python, тогда как старая - под именем pythonXY-1;

Замечание 1: Более строго было бы использовать имя pythonX.Y-1, но тут сложилась некая традиция, не уверен, что хорошая;

Замечание 2: Для тех, кто в танке: "-" - знак арифметической операции, т.е. если (X,Y) == (2,4), то pythonXY-1 == python23;

  1. После выхода новой минорной версии, все мантейнеры уведомляются о необходимости пересборки и тестирования модулей с новой версией python;
  2. Если через некоторое время (например - 1 месяц) модуль не был пересобран - он удаляется из репозитория (кажется, это называется orphaned);
  3. Как и раньше, основной версией python в Sisyphus является последняя пересобранная, старые версии лежат только для тестовых целей и в дистрибутив, если таковой будет собираться на основе Sisyphus, не входят;
  4. Как следствие п.5, все модули в Sisyphus будут собираться и поставлятся только с последней версией;
  5. При необходимости, любой потребитель Sisyphus может пересобрать модуль под старую версию python и самостоятельно использовать ее. Новая схема сборки допускает такую возможность указанием ключа --with pythonMN;
  6. Новая схема сборки допускает решение, при котором в дистрибутив входят две и более версии языка python с некоторыми модулями, пересобранными под несколько версий. Такое решение может быть использованио исключительно в ситуации, когда один из необходимых пакетов дистрибутива не может быть пересобран с последней версией python (например, Zope, хотя до сих пор этого удавалось избежать). В этом случае подлежат пересборке модули, требуемые этим пакетом и не более того. Пересборка модулей ведется так, что бы запуск rpm на пересборку _безуказания каких-либо ключей порождал валидный пакет для pythonMN, снабженный префиксом python-moduleMN;

    Замечание 2: Текущая версия новых макросов не позволяет это сделать, но я надеюсь, что Алексей что-либо придумает, в крайнем случае возможен следующий хак: явно включать в пересобираемый spec соотв. макрос;

    Замечание 3: Такая пересборка может приводить к появлению в репозитории нескольких почти идентнчных файлов src.rpm c пакетами модулей для python разных версий. Хотя это может показаться странным, необходжимо учитывать следующее обстоятельство: форк есть форк. И если в момент форка некий модуль test-u.v.w можно было пересобрать для обеих версий, то модуль test-u.v.w+n, при достаточно большом n (в случае некоторых модулей ~1), скорее всего, нет: новые фичи в питон для того и вводятся, чбы их использовать, и примеров я могу привести достаточно много;

Жизненный цикл с точки зрения потребителей :

  1. Потребитель регулярно издает команду :

apt-get upgrade (или dist-upgrade)

Потребитель, не делающий этого, очевидно, не является потребителем Sisyphus и о нем в этом разделе речи не идет ;)

  1. Потребитель следит за тем, чбы апгрейд проходил нормально (т.е. новые версии python и модулей к нему ставились), при этом "любимые" модули не сносились;
  2. Если потребитель увидел что-то типа "python-X.Y.Z will be upgraded, but python-module-IMPORTANT will be removed", то это повод писать письма мантейнеру модуля IMPORTANT с просьбами его пересобрать. Конфликты такого рода решаются в рамках стандартной POLICY Alt Linux Team и не являются python-специфичными;
  3. Новая схема сборки модулей гарантирует (зависмостями) невозмиожность установки модулей от старых версий python с его новыми версиями (по крайней мере на уровне минорных версий, нужно ли затрагивать сабминоры - вопрос открытый, выйдет python2.3.4 - посмотрим);

Правила работы с пакетом python

Небольшая преамбула : эти правила написаны по мотивам прототипа пакета под названием test. Кое-что изменилось (я не стал вводить модуль python-strict и python-core), но я не уверен еще в валидности этих изменений: не все работает нормально. Вполне возможно, что python-strict & python-core будут возвращены;

Состав пакета :

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

python, python-base
минимальная установка питона, достаточная для его работы, практически не содержит модулей;
python-modules
псевдопакет, содержащий зависимости на все модули питон, рекомендованные к установке (не рекомендован, в частности, пакет python-obsolete);
python-obsolete
пакет, содержащий фрагменты python, которые объявлены устаревшими (например, rotor.py) или несекъюрными (он же, в более ранее время);
python-modules-*
много модулей, реально каждый пакет содежит большую группу модулей, относящихся к примерно-одной тематике, над автоматической кластеризацией я сейчас работаю;
python-tools-*
различные инструменты для и на python, например python-tools-idle;
python-devel
то, что необходимо для разработки на python;
python-info
документация в формате info;
python-doc
документация в других форматах;
python-weak
python с облегченными зависимостями, допускающий провести совместную установку со старой версий pythonX.Y
tkinter
это tkinter. Возможно, будет переименован в python-modules-tkinter;

Разделенние python-info & python-doc сложилось исторически и мбть будет устранено. Цель распилки питона на отдельные модули - минимизировать установку при решении конкретных задач. Существуют определенные проблемы, например, с поиском (в т.ч. автоматическим) зависимостей. Работы над их решением ведутся, до их решения пакет python будет содержать явную зависимость на пакет python-modules, что будет приводить к установке всех необходимых пакетов. После их решения - зависимости в ваши модули будут проставлены автоматически.

Правила работы с пакетом :

Чбы проиллюстрировать работу, просто приведу несколько команд:

  1. Установка старой версии :

    apt-get install python22

  2. 1 Обновление ее до новой версии (старая версия будет снесена):

    apt-get install python

  3. 2 Установка новой версии с сохранением старой (для тех кому надо):

    apt-get install python-weak

  4. 2.1 Удаление старой версии

    apt-get install python

Обычные пользователи проводят систему через стадии 1, 2.1; Разработчики, которым некоторое время могут быть реально нужны обе версии python, проводят систему через стадии 1, 2.2, 2.2.1, понимая при этом, что на стадии 2.2 система может оказаться не юзабельной, по причине некоректности зависимостей: python-weak менее требователен к зависимостям, и, в частности, допускает совместную установку с python старых версий.

Правила сборки и офрмления модуля для языка python

  1. Модуль для python собирается с префиксом python-module-;
  2. Модуль для одной из старых версий pythonX.Y собирается с префиксом pythonX.Y-module-;
  3. Модуль должен содержать явно указанную зависимость на версию питон, использованный при его сборке, такая зависимость вводится указанием кляуз вида :

    python = %__python_version

    python-devel = %__python_version

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

  1. В параметре GROUP спека должен быть указан Development/Python/Modules;
  2. Для сборки модуля рекомендуетсся использовать темплейт, предложенный Алексеем Морозовым для модуля python-serial, но его использование не обязательно. По крайней мере, пока. В модуле, собранном таким образом, все необходимые параметры будут проставлены автоматически;
  3. Отключать повторную байт-компиляцию python не рекомендуется, так как иначе скомпилированные модули могут выводить некорректную диагностику ошибок (неверный путь к файлу), что крайне неудобно (посыпятся жалобы вида "ваша програма упала в /home/vasya/petya.py, а такого файла вообще нет"). Я это проверил (и диагностику, и жалобы);
  4. Пример спека включен в пакет rpm-build-python;
  5. Для нового модуля можно получить прототип стандартного спека отдав команду:

    python setup.py bdist-altrpm --spec-only,

разумеется, файл setup.py должен быть от этого модуля. Подробнее, см. документацию на distutils и bdist_altrpm (в пакете rpm-build-python).

Использование стандартного спека (я сам не проверял, цитирую автора) :

  1. Сборка :

rpmbuild -ba pyserial.spec

На выходе будет python-pyserial-*.rpm, причем, бинарные rpm привязаны к текущей (вероятно, 2.3) версии python.

  1. Сборка под конкретный питон:

    rpmbuild -ba pyserial.spec --with pythonXY

на выходе будут получаться pythonXY-pyserial...rpm, (AO: напомню, что использование такого варианта сборки пока ориентировано на частное использование);

В данный момент, в качестве XY может использоваться 22, 23 и (задел на будущее) 24.

Зависимости на пакеты с другими модулями python надо прописывать как

Requires: python%__python_package_version-

В текущем варианте, насколько известно, последующая пересборка pythonXY-что-то там без ключа приведет к попытке сборки под "основной" питон. Это не самая большая проблема, так как пока ключик --with ориентирован на домашнее использование.

Вход для пользователей

логин:

пароль:

ZOPE Powered by IIG FS Info Industries Group mosgird