From: Alexey Morozov <alex-altlinux@idisys.iae.nsk.su>
To: Mikhail Zabaluev <mhz@altlinux.org>, devel@altlinux.ru, cray@neural.ru
Subject: Re: [devel] Q: Python packaging howto
Date: Sun, 22 Feb 2004 06:05:00 +0600
Message-ID: <20040222000500.GB15706@localhost.localdomain> (raw)
In-Reply-To: <20040221182533.GB14716@av1046.comex.ru>
[-- Attachment #1: Type: text/plain, Size: 5726 bytes --]
On Sat, Feb 21, 2004 at 09:25:33PM +0300, Mikhail Zabaluev wrote:
> Мне не нравится идея, что основное имя (то, которое принимает
> .src.rpm) зависит от ключей сборки. На самом-то деле исходный
> пакет от этого не зависит.
Ну, мне тоже не слишком нравится.
> Может быть, лучше для Name: оставить имя модуля, без всяких python*-,
> а для объявления бинарного пакета предусмотреть макросы? Впрочем,
> это будет не очень удобно, если макрос для объявления бинарного пакета
> не будет автоматически копировать %description основного пакета.
> Я не знаю, можно ли это сделать в rpm.
Вот именно потому, что я тоже не знаю, я и пошел по пути наименьшего
сопротивления.
> Есть ещё такая радикальная идея: бинарный пакет может именоваться и
> по-человечески, именем tarball'а, но предоставлять также имя,
> привязанное к версии ABI python. При этом могут использоваться
> скобочные схемы, например:
> python-abi(%modulename) = %__python_version
>
> После этого корректное прописывание зависимостей между пакетами
> модулей останется предметом policy.
Хочется не только решить проблему с зависимостями, но и решить проблему
с неединовременным перетеканием всего питоньего хозяйства из одной версии
в другую.
> > Requires: python%__python_package_version-<anotherModule>
> >
> > Могу оформить все это дело в виде отдельного макроса. Предложения по
> > наименованию принимаются.
>
> Помимо изложенного выше предложения, есть такой вариант:
>
> %{python_versioned_name anotherModule}
>
> а также
> %__python_packagename python%__python_package_version
Ну, ждем, пока остальные выскажутся. Мне, в общем, в данном случае,
практически все равно, куда копать.
> Насколько я понимаю, компиляция после %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'ом).
Не только. Нужно еще понять, выделять ли в отдельный пакет (автоматически,
разумеется) .py.
> > в данной схеме есть один, как мне кажется, недочет. Если некто
> > пересобирает модуль вида 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.
Да, конечно. На самом деле, "...зависящий от python,запускаемого..." стоит
переписать как "... зависящий от python, который запускался в момент сборки
пакета как /usr/bin/python".
> Точно так же, нет смысла в общем имени каталога /usr/lib/python
Есть. Для исходников (.py). Они НЕ БУДУТ использоваться напрямую,
а просто для "напосмотреть".
> > %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/
> Не увидел проблем при использовании обычной схемы:
Ну, это место я еще не оптимизировал. К тому же, я игрался на 2.2, там,
помнится, что-то странное происходило в этом месте. Ну и, я пока не понял,
как отнести управляемую байт-компиляцию в %build stage.
> %build
> CFLAGS="$RPM_OPT_FLAGS" python setup.py build
>
> %install
> python setup.py install \
> --optimize=%python_optlevel \
> --root=$RPM_BUILD_ROOT \
> --record=INSTALLED_FILES
Ну и не python, а %__python, все-таки.
> .pyo и .pyc исправно попадают в INSTALLED_FILES.
> Проверял, правда, только на 2.3.
Да, там все нормально.
> P.S. Залил в Sisyphus python-doc версии 2.3.3. Было бы неплохо, если
> бы maintainer Python своевременно обновлял также и этот пакет.
> Там можно прочитать о хорошем способе генерации начального .spec
> для модуля:
> python setup.py bdist_rpm --spec-only
Посмотрите на libAltDist :-)
> Я думаю, об этом стоит написать в HOWTO.
> А может быть, даже подправить шаблон для .spec'а для того, чтобы
> он получался сразу готовым к употреблению.
Уже подправили. Только мне не очень понравилось качество кодирования.
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2004-02-22 0:05 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
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 ` Alexey Morozov [this message]
2004-02-22 22:05 ` 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=20040222000500.GB15706@localhost.localdomain \
--to=alex-altlinux@idisys.iae.nsk.su \
--cc=cray@neural.ru \
--cc=devel@altlinux.ru \
--cc=mhz@altlinux.org \
/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