Создание пакетов с модулями Python3 — различия между версиями
D uragan (обсуждение | вклад) (орфография/пунктуация) |
D uragan (обсуждение | вклад) (Now we use 2019.1 branch) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
'''Python3''' - современная линейка версий языка и интерпретатора Python, вот уже несколько лет усиленно вытесняющая Python2. Поскольку многие проекты все еще ориентируются на Python2, то для многих модулей Python в РОСЕ предусмотрено два варианта - для Python2 и Python3. Оформляются эти "варианты" как отдельные пакеты - обычно {{Pkg|python-foo}} содержит модуль '''foo''' для Python2, а {{Pkg|python3-foo}} - '''foo''' для Python3. | '''Python3''' - современная линейка версий языка и интерпретатора Python, вот уже несколько лет усиленно вытесняющая Python2. Поскольку многие проекты все еще ориентируются на Python2, то для многих модулей Python в РОСЕ предусмотрено два варианта - для Python2 и Python3. Оформляются эти "варианты" как отдельные пакеты - обычно {{Pkg|python-foo}} содержит модуль '''foo''' для Python2, а {{Pkg|python3-foo}} - '''foo''' для Python3. | ||
− | Если в репозитории уже есть пакет {{Pkg|python-foo}}, то можно достаточно быстро создать на его основе {{Pkg|python3-foo}}. Для этого ищем проект для '''python-foo''' в [http://abf.io/import группе import на ABF] - и клонируем его в свой репозиторий в ABF под именем '''python3-foo''' (с помощью кнопки «Fork»). | + | Если в репозитории уже есть пакет {{Pkg|python-foo}}, то можно достаточно быстро создать на его основе {{Pkg|python3-foo}} (если пакета нет, то необходимо сначала [[Создание пакетов с модулями Python|его создать]]). Для этого ищем проект для '''python-foo''' в [http://abf.io/import группе import на ABF] - и клонируем его в свой репозиторий в ABF под именем '''python3-foo''' (с помощью кнопки «Fork»). |
− | Далее клонируем git-репозиторий проекта на локальную машину, переключаемся на ветку Git с названием " | + | Далее клонируем git-репозиторий проекта на локальную машину, переключаемся на ветку Git с названием "rosa2019.1" и переименовываем spec-файл {{File|python-foo.spec}} в {{File|python3-foo.spec}}. Для верности, обрабатываем этот файл инструментом {{Prog|spec-cleaner}}. Выглядит это в командной строке примерно так: |
− | $ abf get <your_abf_login>/python3-foo -b | + | $ abf get <your_abf_login>/python3-foo -b rosa2019.1 |
$ cd python3-foo | $ cd python3-foo | ||
$ git mv python-foo.spec python3-foo.spec | $ git mv python-foo.spec python3-foo.spec | ||
Строка 47: | Строка 47: | ||
Получившийся в результате пакет необходимо попробовать установить с помощью {{Prog|urpmi}}: | Получившийся в результате пакет необходимо попробовать установить с помощью {{Prog|urpmi}}: | ||
− | $ urpmi -- | + | $ urpmi --test ~/rpmbuild/RPMS/<pkg_arch>/python3-foo-<version>.rpm |
Здесь <pkg_arch> может принимать значение i586, x86_64 или noarch – это зависит от архитектуры вашей системы и от того, помечен ли пакет как независимый от архитектуры (это определяется наличием конструкции "BuildArch: noarch" в spec-файле). Посмотрите на вывод rpmbuild – он выводит пути к собранным пакетам. Если urpmi сообщит, что не может установить зависимость типа {{Pkg|python3-pad}}, то вам нужно также озаботиться созданием пакета {{Pkg|python3-pad}}. Для сборки {{Pkg|python3-foo}} он не нужен, но вот для его работы понадобится. | Здесь <pkg_arch> может принимать значение i586, x86_64 или noarch – это зависит от архитектуры вашей системы и от того, помечен ли пакет как независимый от архитектуры (это определяется наличием конструкции "BuildArch: noarch" в spec-файле). Посмотрите на вывод rpmbuild – он выводит пути к собранным пакетам. Если urpmi сообщит, что не может установить зависимость типа {{Pkg|python3-pad}}, то вам нужно также озаботиться созданием пакета {{Pkg|python3-pad}}. Для сборки {{Pkg|python3-foo}} он не нужен, но вот для его работы понадобится. | ||
Строка 55: | Строка 55: | ||
Как только пакет успешно собрался, отправляем результаты назад на ABF: | Как только пакет успешно собрался, отправляем результаты назад на ABF: | ||
− | $ abf put -m | + | $ abf put -m "Created python3 module" |
+ | |||
+ | Для надежности, следует попробовать собрать пакет уже на ABF - это позволяет выявить ошибки, которые можно пропустить при локальной сборке. Для этого необходимо перейти на страничку вашего проекта, нажать "New Build" и в появившемся окне слева отметить галочками репозитории main и contrib для платформы rosa2019.1 (последней на момент написания этой странички, если есть платформа поновее - то надо выбирать ее). | ||
И докладываем разработчикам РОСЫ о том, что пакет готов и лежит на ABF. | И докладываем разработчикам РОСЫ о том, что пакет готов и лежит на ABF. | ||
+ | |||
+ | Более подробная информация о правилах оформления модулей Python приведена на странице [[Python policy]]. | ||
[[Категория:Практика студентов]] | [[Категория:Практика студентов]] |
Текущая версия на 13:02, 3 июля 2019
Python3 - современная линейка версий языка и интерпретатора Python, вот уже несколько лет усиленно вытесняющая Python2. Поскольку многие проекты все еще ориентируются на Python2, то для многих модулей Python в РОСЕ предусмотрено два варианта - для Python2 и Python3. Оформляются эти "варианты" как отдельные пакеты - обычно python-foo содержит модуль foo для Python2, а python3-foo - foo для Python3.
Если в репозитории уже есть пакет python-foo, то можно достаточно быстро создать на его основе python3-foo (если пакета нет, то необходимо сначала его создать). Для этого ищем проект для python-foo в группе import на ABF - и клонируем его в свой репозиторий в ABF под именем python3-foo (с помощью кнопки «Fork»).
Далее клонируем git-репозиторий проекта на локальную машину, переключаемся на ветку Git с названием "rosa2019.1" и переименовываем spec-файл python-foo.spec в python3-foo.spec. Для верности, обрабатываем этот файл инструментом spec-cleaner. Выглядит это в командной строке примерно так:
$ abf get <your_abf_login>/python3-foo -b rosa2019.1 $ cd python3-foo $ git mv python-foo.spec python3-foo.spec $ spec-cleaner python3-foo.spec
После чего внутри файла python3-foo прочесываем поля BuildRequires, Requiers, Suggest и Conflicts на предмет наличия там строк, начинающихся с «python-» или «pythonegg». Такие вхождения меняем на python3- и python3egg соответственно. Т.е. такие вот строки:
BuildRequires: python-devel Requires: pythonegg(setuptools)
Должны преобразоваться в такие:
BuildRequires: python3-devel Requires: python3egg(setuptools)
Теперь смотрим на секции %build, %install и %check (если есть) и заменяем там вызов команды python на вызов python3.
Наконец, смотрим на секцию %files и заменяем макросы, начинающиеся на %{py_, соответствующими макросами, начинающимися на %{py3_. Например, такая строка:
%{py_platsitedir}/%{module}/foo.py*
должна превратиться в такую:
%{py3_platsitedir}/%{module}/foo.py*
Такую замену макросов %{py_ надо сделать и в других местах spec-файла, если эти макросы там вдруг встретятся.
Теперь получившийся пакет надо собрать. Для этого сначала надо установить пакеты, которые требуются для его сборки (прописаны в BuildRequires). Для этого внутри директории python3-foo выполняем команду:
$ urpmi python3-foo.spec
Если вам сообщат, что зависимости не могут быть установлены, т. к. не хватает пакета python3-bar, то вам надо сначала собрать python3-bar, а уже потом возвращаться к python3-foo.
Если все ok, то извлекаем с ABF необходимые для сборки файлы и запускаем саму сборку с помощью rpmbuild:
$ abf fetch $ rpmbuild -bb python3-foo.spec
В идеале, все должно собраться сразу. Часто могут возникать проблемы из-за того, что где-то забыли поменять «python» на «python3» или «py» на «py3». Иногда встречаются и специфические для python3 ошибки, так что если за разумное время пакет собрать не удалось, лучше обратиться к разработчикам РОСЫ.
Получившийся в результате пакет необходимо попробовать установить с помощью urpmi:
$ urpmi --test ~/rpmbuild/RPMS/<pkg_arch>/python3-foo-<version>.rpm
Здесь <pkg_arch> может принимать значение i586, x86_64 или noarch – это зависит от архитектуры вашей системы и от того, помечен ли пакет как независимый от архитектуры (это определяется наличием конструкции "BuildArch: noarch" в spec-файле). Посмотрите на вывод rpmbuild – он выводит пути к собранным пакетам. Если urpmi сообщит, что не может установить зависимость типа python3-pad, то вам нужно также озаботиться созданием пакета python3-pad. Для сборки python3-foo он не нужен, но вот для его работы понадобится.
Наконец, неплохо бы убедиться в работоспособности полученного модуля - хотя бы написать небольшой скрипт на python3, импортирующий этот модуль.
Как только пакет успешно собрался, отправляем результаты назад на ABF:
$ abf put -m "Created python3 module"
Для надежности, следует попробовать собрать пакет уже на ABF - это позволяет выявить ошибки, которые можно пропустить при локальной сборке. Для этого необходимо перейти на страничку вашего проекта, нажать "New Build" и в появившемся окне слева отметить галочками репозитории main и contrib для платформы rosa2019.1 (последней на момент написания этой странички, если есть платформа поновее - то надо выбирать ее).
И докладываем разработчикам РОСЫ о том, что пакет готов и лежит на ABF.
Более подробная информация о правилах оформления модулей Python приведена на странице Python policy.