Создание пакетов с модулями Python3 — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(орфография/пунктуация)
(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 с названием "rosa2016.1" и переименовываем spec-файл {{File|python-foo.spec}} в {{File|python3-foo.spec}}. Для верности, обрабатываем этот файл инструментом {{Prog|spec-cleaner}}. Выглядит это в командной строке примерно так:
+
Далее клонируем git-репозиторий проекта на локальную машину, переключаемся на ветку Git с названием "rosa2019.1" и переименовываем spec-файл {{File|python-foo.spec}} в {{File|python3-foo.spec}}. Для верности, обрабатываем этот файл инструментом {{Prog|spec-cleaner}}. Выглядит это в командной строке примерно так:
  
  $ abf get <your_abf_login>/python3-foo -b rosa2016.1
+
  $ 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 --{{how-to-install|{{lc:{{PAGENAME}}}}}}test ~/rpmbuild/RPMS/<pkg_arch>/python3-foo-<version>.rpm
+
  $ 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 «Created python3 module»
+
   $ 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.