ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Mikhail Zabaluev <mhz@altlinux.org>
To: Alexey Morozov <alex-altlinux@idisys.iae.nsk.su>
Cc: devel@altlinux.ru, cray@neural.ru
Subject: Re: [devel] Q: Python packaging howto
Date: Sat, 21 Feb 2004 21:25:33 +0300
Message-ID: <20040221182533.GB14716@av1046.comex.ru> (raw)
In-Reply-To: <20040221113726.GB29390@pyro.hopawar.private.net>

[-- Attachment #1: Type: text/plain, Size: 5513 bytes --]

Hello Alexey,

On Sat, Feb 21, 2004 at 05:37:26PM +0600, Alexey Morozov wrote:
>
> В аттачменте файл python, который, по-хорошему, идет в python-common
> и пример спек файла. Собирать при помощи
> 
> rpmbuild -ba pyserial.spec
> 
> На выходе будет python-pyserial-*.rpm, причем, бинарные rpm привязаны к
> текущей (вероятно, 2.3) версии python. Если нужна сборка под какой-либо
> конкретный питон, то
> 
> rpmbuild -ba pyserial.spec --with pythonXY
> 
> на выходе будут получаться
> 
> pythonXY-pyserial...rpm

Мне не нравится идея, что основное имя (то, которое принимает
.src.rpm) зависит от ключей сборки. На самом-то деле исходный
пакет от этого не зависит.

Может быть, лучше для Name: оставить имя модуля, без всяких python*-,
а для объявления бинарного пакета предусмотреть макросы? Впрочем,
это будет не очень удобно, если макрос для объявления бинарного пакета
не будет автоматически копировать %description основного пакета.
Я не знаю, можно ли это сделать в rpm.

Есть ещё такая радикальная идея: бинарный пакет может именоваться и
по-человечески, именем tarball'а, но предоставлять также имя,
привязанное к версии ABI python. При этом могут использоваться
скобочные схемы, например:
python-abi(%modulename) = %__python_version

После этого корректное прописывание зависимостей между пакетами
модулей останется предметом policy.

> в данный момент, в качестве XY может использоваться 22, 23 и (задел на
> будущее) 24. К сожалению, я не придумал, как можно сделать это место
> полностью универсальным.
> 
> Зависимости на пакеты с другими модулями python надо прописывать как
> 
> Requires: python%__python_package_version-<anotherModule>
> 
> Могу оформить все это дело в виде отдельного макроса. Предложения по
> наименованию принимаются.

Помимо изложенного выше предложения, есть такой вариант:

%{python_versioned_name anotherModule}

а также
%__python_packagename python%__python_package_version

> Данные макросы никак не затрагивают эту область. То есть, метод
> сборки и упаковки определяется исключительно пэкеджером. Единственное
> условие - делать в конце %install unset RPM_PYTHON, чтобы исключить
> скорее всего нежелательную (повторную) байт-компиляцию. Хотя, конечно,
> сейчас этот самый RPM_PYTHON, по-хорошему, будет указывать именно на ту
> версию питона, для которой собирается пакет (даже если идет сборка по
> умолчанию)

Насколько я понимаю, компиляция после %install необходима только для
тех скриптов, которые не используют схему установки из distutils
с опцией --root. Если так, то да, лучше её отключить.

По идее, нужно добиться, чтобы RPM_PYTHON была установлена правильно
во всех случаях.
Как насчёт %set_python_version по примеру autoconf/automake/libtool?
Тогда /usr/bin/python из python-common запустит требуемую версию
или контролируемый альтернативами /usr/bin/python-default.

Этот же трюк позволит избавиться от --with-pythonXY и таинственного
макроса setup_python_module: тем, кто захочет зафиксировать версию
python в своей сборке, достаточно будет вставить
%set_python_version X.Y в spec.

> У меня есть идея оформить стандартные действия при инсталляции макросами,
> аналогичными %perl_vendor_build/%perl_vendor_install, которые бы покрывали
> основные нужды сборщиков (при использовании distutils). Вероятно, сегодня
> ближе к вечеру это будет сделано. Скорее всего, по умолчанию будут
> паковаться только .pyo, но, надеюсь :-), будет возможность, во-первых,
> собрать [отдельный] пакет с .py, а, во-вторых, переключиться на
> использование .pyc.

Достаточно определить макрос для уровня оптимизации, %python_optlevel,
и использовать его в опции --optimize (с разумным fallback'ом).

> Дополнительные замечания по поводу сборки:
> 
> в данной схеме есть один, как мне кажется, недочет. Если некто
> пересобирает модуль вида pythonXY-pyModule-K.L.M-altN.src.rpm, не
> указывая --with pythonXY, то на выходе он получает модуль, привязанный к
> ТЕКУЩЕЙ версии питона, а не к версии X.Y. Имена и зависимости пакетов
> изменяются соответственно (то есть, будет
> python-pyModule-K.L.M-altN.i586.rpm, зависящий от python, запускаемого
> как /usr/bin/python).

Мне кажется, бинарный пакет с модулем должен всегда быть привязан
к конкретной версии python ABI, коль скоро он содержит байт-код
под этот ABI. Точно так же, нет смысла в общем имени каталога
/usr/lib/python


> %build
> mkdir -p buildroot
> 
> # Unfortunately build and install steps should be done at once
> # because otherwise .pyo files won't get into INSTALLED_FILES
> # record
> 
> CFLAGS="%optflags" %__python setup.py \
> 	install --optimize=2 \
> 		--root=`pwd`/buildroot \
> 		--record=INSTALLED_FILES
> %install
> 
> cp -pr buildroot %buildroot/


Не увидел проблем при использовании обычной схемы:


%build
CFLAGS="$RPM_OPT_FLAGS" python setup.py build

%install
python setup.py install \
       --optimize=%python_optlevel \
       --root=$RPM_BUILD_ROOT \
       --record=INSTALLED_FILES


.pyo и .pyc исправно попадают в INSTALLED_FILES.
Проверял, правда, только на 2.3.


P.S. Залил в Sisyphus python-doc версии 2.3.3. Было бы неплохо, если
бы maintainer Python своевременно обновлял также и этот пакет.
Там можно прочитать о хорошем способе генерации начального .spec
для модуля:
python setup.py bdist_rpm --spec-only
Я думаю, об этом стоит написать в HOWTO.
А может быть, даже подправить шаблон для .spec'а для того, чтобы
он получался сразу готовым к употреблению.

-- 
Stay tuned,
  MhZ                                     JID: mhz@altlinux.org
___________
Daemon escaped from pentagram

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2004-02-21 18:25 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-20 12:00 Mikhail Zabaluev
2004-02-20 12:04 ` Klimchev Konstantin
2004-02-20 13:45 ` Andrey Orlov
2004-02-21 11:37 ` Alexey Morozov
2004-02-21 18:25   ` Mikhail Zabaluev [this message]
2004-02-21 19:14     ` Dmitry V. Levin
2004-02-22  0:26       ` Alexey Morozov
2004-02-22 19:59         ` [devel] " Mikhail Zabaluev
2004-02-22 20:15           ` Andrey Orlov
2004-02-23 22:58             ` Mikhail Zabaluev
2004-02-23  1:20           ` Alexey Morozov
2004-02-23 23:05             ` Mikhail Zabaluev
2004-02-22  0:05     ` [devel] " Alexey Morozov
2004-02-22 22:05       ` [devel] " Mikhail Zabaluev
2004-02-23  0:46         ` Alexey Morozov
2004-02-23  6:19           ` Andrey Orlov
2004-02-23 23:12             ` Mikhail Zabaluev
2004-02-24  7:28               ` Andrey Orlov
2004-02-23 23:16           ` Mikhail Zabaluev
2004-02-24 10:53             ` Michael Shigorin
2004-02-22  7:18     ` [devel] " Andrey Orlov
2004-02-22 13:39   ` Andrey Orlov
2004-02-22 13:40   ` Andrey Orlov
2004-02-22 16:20   ` Andrey Orlov
2004-02-22 17:58 ` [devel] [JT] " Michael Shigorin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040221182533.GB14716@av1046.comex.ru \
    --to=mhz@altlinux.org \
    --cc=alex-altlinux@idisys.iae.nsk.su \
    --cc=cray@neural.ru \
    --cc=devel@altlinux.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git