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 --]
next prev parent 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