================================================================================
$Id: 3-Python_MODULE.txt 29 2006-06-10 12:08:45Z ns $
--------------------------------------------------------------------------------
Правила сборки и оформления пакета с модулем на языке python

    1.  Наименование пакета
    
        В репозитории всегда существует единственная основная
        версия python, собранная в пакет с именем python. В репозитории
        может существовать ноль или более вспомогательных версий, собранных
        в пакеты с названиями ::
        
            "python" <MAJOR> "." <MINOR>
            
            <MAJOR>, <MINOR> - номера вспомогателной версии python.                        
    
        1.1.    Пакет для основной версии ДОЛЖЕН быть назван как::
        
                "python-module-" <ИМЯ>
                
                <ИМЯ> - имя модуля;

        1.2.    Пакет, пересобранный для вспомогательной версии python ДОЛЖЕН
            быть назван как::
            
                "python" <MAJOR> "." <MINOR>  "-module-" <ИМЯ>
                
        1.3.    Имя модуля СЛЕДУЕТ выбирать таким же, как имя, используемое
            в операторе import;
        
        1.4.    Для пакета, включающего несколько модулей,
            имя модуля СЛЕДУЕТ выбирать таким же, как у основного модуля пакета;

    2.  Состав пакета            

        1.1.    В пакет СЛЕДУЕТ включать только один модуль, указываемый
            в операторе import в программах, использующих данный пакет;
    
        1.2.    Пакет МОЖЕТ включать несколько модулей (например, один
            основной и несколько модулей, вызываемых из него и не имеющих
            самостоятельного значения); 

    3.  Указание зависимостей
    
        3.1.    Пакет ДОЛЖЕН содержать явно указанную зависимость на версию питона,
            использованного при его сборке. Такая зависимость вводится указанием
            следующих операторов::
            
                Requires: python = %__python_version

                BuildPreReq: python-devel = %__python_version
            
            Замечание: Из-за некоторых тонкостей реализации apt, пришлось
                отказатся от того, чбы держать в дистрибутиве пакет с именем
                python-devel и он провайдится пакетом python-dev, в то же
                время указывать зависимость на пакет python-dev
                __абсолютно__ недопустимо. Объяснения и споры могут быть
                очень долгими, но иначе это не работает.  Некоторые подробности
                изложены в FAQ Q20. Если вы считаете, что есть другое
                решение, или у вас возникают какие-то проблемы из-за этого -
                спишитесь с мантейнерами полиси;
                
        3.2.    Пакет ДОЛЖЕН собиратся с автоопределением зависимостей, НЕ СЛЕДУЕТ
            указывать какие-либо зависимости вручную;
            
        3.5.    При необходимости, МОЖНО указывать зависимости на пакеты с другими
            модулями python. Для указания таких зависимостей ДОЛЖНЫ использоваться
            макросы py_provides, py_requires, py_dependencies, py_package_requires,
            py_package_provides, py_package_dependencies.

        3.6.    В пакет СЛЕДУЕТ включать явно указанную зависимость на версию
            rpm-build-python, использованную при его сборке. Такая зависимость
            вводится указанием операторов::
            
                BuildPreReq: rpm-build-python >= %__rpm_build_python_version
                
                /* FIXME! */
                
        3.7.    Пакеты, собранные вместо ранее существовавших пакетов, для
            того, что бы удовлетворить требования полиси, ДОЛЖНЫ включать 
            следующие операторы:
            
                Provides: <OLDNAME>                
            
                Obsoletes: <OLDNAME> <= <OLDVERSION>
            
           где:
           
                <OLDNAME>   - старое имя пакета;
                
                <OLDVERSION> - последняя версия пакета, собранного под старым именем;

    4.  Другие параметры пакета
                
        4.1.    В параметре GROUP спека СЛЕДУЕТ  указывать значение "Development/Python";
        
    5.  Использование макросов
    
        3.1.    Пакет rpm-build-python включает ряд макросов, 

        3.2.    Для сборки модуля рекомендуетсся использовать темплейт,
            предложенный Алексеем Морозовым для модуля python-module-serial,
            но его использование не обязательно. По крайней мере, пока. В
            модуле, собранном таким образом, все необходимые параметры будут
            проставлены автоматически;

    6.  Дополнительные рекомендации
    
        6.1.    НЕ СЛЕДУЕТ отключать повторную байт-компиляцию модулей:
        
            Замечание: При отключении повторной байт-компиляции
                скомпилированные модули могут выводить некорректную
                диагностику ошибок (неверный путь к файлу), что крайне
                неудобно (посыпятся жалобы вида "ваша програма упала в
                /home/vasya/petya.py, а такого файла вообще нет"). Я это
                проверил (и диагностику, и жалобы);

        6.2.    Черновик спецификации для нового модуля, который планируется включить
            в репозиторй, СЛЕДУЕТ генерировать посредством указания команды::
        
                python setup.py bdist-altrpm --spec-only,
            
            Замечание: Файл setup.py должен быть от этого модуля. Подробнее,
                см. документацию на distutils и bdist_altrpm (в пакете
                rpm-build-python).

    7.  Использование стандартной спецификации:
        
        7.1. Примеры спецификаций включены в пакет rpm-build-python;

        7.2.    Для сборки под основной версией python следует издать команду::

                rpmbuild -ba python-module-<ИМЯ>.spec

            На выходе будут получены файлы python-module-<ИМЯ>-*.rpm,
            причем, бинарные rpm привязаны к основной версии python.
            
        7.3.  Для сборки под вспомогательную версию python следует издать команду:            
            
                rpmbuild -ba python-module-<ИМЯ>.spec --with python<MAJOR><MINOR>

            На выходе будут получены файлы
            python<MAJOR>.<MINOR>-module-<ИМЯ>-*.rpm, (использование такого
            варианта сборки ориентировано на частное использование);

            Замечание: Обратите внимание, что пересборка пакета
                python<MAJOR>.<MINOR>-module-<ИМЯ>.src.rpm _сохраняет_ его привязку к
                выбранной версии python. Для того, чтобы пересобрать пакет с
                "основным" питоном, используйте ключ --with python_auto.
    
================================================================================

