From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sat, 21 Feb 2004 17:37:26 +0600 From: Alexey Morozov To: Mikhail Zabaluev , devel@altlinux.ru Subject: Re: [devel] Q: Python packaging howto Message-ID: <20040221113726.GB29390@pyro.hopawar.private.net> References: <20040220120041.GA2684@av1046.comex.ru> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="QRj9sO5tAVLaXnSD" Content-Disposition: inline In-Reply-To: <20040220120041.GA2684@av1046.comex.ru> User-Agent: Mutt/1.4.2.1i Cc: cray@neural.ru X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.1.4 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 21 Feb 2004 11:37:29 -0000 Archived-At: List-Archive: List-Post: --QRj9sO5tAVLaXnSD Content-Type: multipart/mixed; boundary="Yylu36WmvOXNoKYn" Content-Disposition: inline Content-Transfer-Encoding: 8bit --Yylu36WmvOXNoKYn Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit On Fri, Feb 20, 2004 at 03:00:41PM +0300, Mikhail Zabaluev wrote: > Хотелось бы узнать, желательно в виде howto или примера spec'а, как > сложился/складывается официально одобренный способ сборки модулей > для python. На меня повесили сборку PyXML для python 2.3, хотелось > бы это сделать сразу правильно. В аттачменте файл python, который, по-хорошему, идет в python-common и пример спек файла. Собирать при помощи rpmbuild -ba pyserial.spec На выходе будет python-pyserial-*.rpm, причем, бинарные rpm привязаны к текущей (вероятно, 2.3) версии python. Если нужна сборка под какой-либо конкретный питон, то rpmbuild -ba pyserial.spec --with pythonXY на выходе будут получаться pythonXY-pyserial...rpm в данный момент, в качестве XY может использоваться 22, 23 и (задел на будущее) 24. К сожалению, я не придумал, как можно сделать это место полностью универсальным. Зависимости на пакеты с другими модулями python надо прописывать как Requires: python%__python_package_version- Могу оформить все это дело в виде отдельного макроса. Предложения по наименованию принимаются. Да, попробуйте все это погонять в разных установочных средах, возможно, в макросах есть ошибки и/или недочеты. > Мои беглые мысли по поводу отдельных идей, высказанных в дискуссии > (кстати, с архивами в http://www.altlinux.ru/pipermail/devel/ > какая-то беда: части сообщений я там не вижу). Отбрасывать .pyc > нежелательно, поскольку это то, что интерпретатор использует > по умолчанию без ключа оптимизации. Я не уверен, скажем, что отладка > работает на .pyo Данные макросы никак не затрагивают эту область. То есть, метод сборки и упаковки определяется исключительно пэкеджером. Единственное условие - делать в конце %install unset RPM_PYTHON, чтобы исключить скорее всего нежелательную (повторную) байт-компиляцию. Хотя, конечно, сейчас этот самый RPM_PYTHON, по-хорошему, будет указывать именно на ту версию питона, для которой собирается пакет (даже если идет сборка по умолчанию) У меня есть идея оформить стандартные действия при инсталляции макросами, аналогичными %perl_vendor_build/%perl_vendor_install, которые бы покрывали основные нужды сборщиков (при использовании distutils). Вероятно, сегодня ближе к вечеру это будет сделано. Скорее всего, по умолчанию будут паковаться только .pyo, но, надеюсь :-), будет возможность, во-первых, собрать [отдельный] пакет с .py, а, во-вторых, переключиться на использование .pyc. > Вообще вся затея обеспечить постепенную миграцию может принести > больше проблем, чем разовая смена всех модулей в день Д с > предварительной подготовкой, возложенной на packager'ов. Я тут уже высказывал сомнения в практической реальности такого "Часа Ч". Вкратце: не все питоньи модули можно пересобрать в тот же момент, когда появляется новая версия питона. Пример - Zope, который его создателям и Андрею понадобилось патчить для обеспечения функционирования под python2.3. Как следствие, "Час Ч" растягивается по времени месяца на полтора-два. А вот, например, мне ждать Зоупа нет никакого смысла, поскольку я его не использую, а Твистед, кажется, едет на 2.3 вполне прилично. Ну и так далее. Конечно, в "дистрибутив" крайне желательно запихивать только один питон с полным набором модулей к нему. Дополнительные замечания по поводу сборки: в данной схеме есть один, как мне кажется, недочет. Если некто пересобирает модуль вида pythonXY-pyModule-K.L.M-altN.src.rpm, не указывая --with pythonXY, то на выходе он получает модуль, привязанный к ТЕКУЩЕЙ версии питона, а не к версии X.Y. Имена и зависимости пакетов изменяются соответственно (то есть, будет python-pyModule-K.L.M-altN.i586.rpm, зависящий от python, запускаемого как /usr/bin/python). В принципе, я, похоже, уже знаю, как обойти эту проблему (если это проблема), правда, блин, хак будет тот еще (хоть и не требующий изменения ни в спеке, ни в rpm). Такая возможность интересна? --Yylu36WmvOXNoKYn Content-Type: text/plain; charset=utf-8 Content-Disposition: attachment; filename="pyserial.spec" Content-Transfer-Encoding: base64 IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0NCiVkZWZpbmUJdmVyc2lvbgkyLjANCiVkZWZpbmUg cmVsZWFzZSBhbHQyDQoNCiVzZXR1cF9weXRob25fbW9kdWxlIHB5c2VyaWFsDQoNClN1bW1h cnk6IFNlcmlhbCBwb3J0IGFjY2VzcyBmb3IgcHl0aG9uDQpTdW1tYXJ5KHJ1X1JVLlVURi04 KTog0JTQvtGB0YLRg9C/INC6INC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtC80YMg 0L/QvtGA0YLRgyDQuNC3IHB5dGhvbg0KTmFtZTogJXBhY2thZ2VuYW1lDQpWZXJzaW9uOiAl dmVyc2lvbg0KUmVsZWFzZTogJXJlbGVhc2UNClNvdXJjZTogJW1vZHVsZW5hbWUtJXZlcnNp b24uemlwDQpMaWNlbnNlOiBQeXRob24NCkdyb3VwOiBEZXZlbG9wbWVudC9QeXRob24NClBy ZWZpeDogJV9wcmVmaXgNClVybDogaHR0cDovL3B5c2VyaWFsLnNmLm5ldA0KDQoNCiMgQXV0 b21hdGljYWxseSBhZGRlZCBieSBidWlsZHJlcSBvbiBXZWQgSmFuIDE0IDIwMDQNCkJ1aWxk UmVxdWlyZXM6IHVuemlwDQoNCiVkZXNjcmlwdGlvbg0KVGhpcyBtb2R1bGUgY2Fwc3VsYXRl cyB0aGUgYWNjZXNzIGZvciB0aGUgc2VyaWFsIHBvcnQuIEl0IHByb3ZpZGVzDQpiYWNrZW5k cyBmb3Igc3RhbmRhcmQgUHl0aG9uIHJ1bm5pbmcgb24gV2luZG93cywgTGludXgsIEJTRCAo cG9zc2libHkNCmFueSBQT1NJWCBjb21waWxhbnQgc3lzdGVtKSBhbmQgSnl0aG9uLiBUaGUg bW9kdWxlIGF1dG9tYXRpY2FseQ0Kc2VsZWN0cyB0aGUgYXBwcm9wcmlhdGUgYmFja2VuZC4N Cg0KVGhpcyBtb2R1bGUgaXMgYnVpbHQgZm9yIHB5dGhvbiAlX19weXRob25fdmVyc2lvbg0K DQolZGVzY3JpcHRpb24gLWwgcnVfUlUuVVRGLTgNCtChINC/0L7QvNC+0YnRjNGOINGN0YLQ vtCz0L4g0LzQvtC00YPQu9GPINC80L7QttC90L4g0YDQsNCx0L7RgtCw0YLRjCDRgSDQv9C+ 0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90YvQvCDQv9C+0YDRgtC+0Lwg0LINCtGB0YLQsNC9 0LTQsNGA0YLQvdC+0LwgUHl0aG9uLCDQt9Cw0L/Rg9GJ0LXQvdC90L7QvCDQvdCwIFdpbmRv d3MsIExpbnV4LCBCU0QgKNCy0L7Qt9C80L7QttC90L4sINC70Y7QsdC+0LkNClBPU0lYLdGB 0L7QstC80LXRgdGC0LjQvNC+0Lkg0YHQuNGB0YLQtdC80LUpINC40LvQuCBKeXRob24uINCc 0L7QtNGD0LvRjCDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQstGL0LHQuNGA0LDQtdGC DQrQv9C+0LTRhdC+0LTRj9GJ0LjQuSDQtNC70Y8g0LTQsNC90L3QvtC5INGB0LjRgdGC0LXQ vNGLINC80LXRhdCw0L3QuNC30Lwg0LTQvtGB0YLRg9C/0LAuDQoNCtCt0YLQvtGCINC80L7Q tNGD0LvRjCDRgdC+0LHRgNCw0L0g0LTQu9GPIFB5dGhvbiDQstC10YDRgdC40LggJV9fcHl0 aG9uX3ZlcnNpb24NCg0KJXBhY2thZ2UgLW4gcHl0aG9uLSVtb2R1bGVuYW1lLWRvYw0KU3Vt bWFyeTogJW1vZHVsZW5hbWUgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZSBwcm9ncmFtcw0K U3VtbWFyeShydV9SVS5VVEYtOCk6INCU0L7QutGD0LzQtdC90YLQsNGG0LjRjyDQv9C+IEFQ SSDQuCDQv9GA0LjQvNC10YDRiyDQv9GA0L7Qs9GA0LDQvNC8INC00LvRjyAlbW9kdWxlbmFt ZQ0KR3JvdXA6IERldmVsb3BtZW50L1B5dGhvbg0KUHJlZml4OiAlX3ByZWZpeA0KUmVxdWly ZXM6IHB5dGhvbi0lbW9kdWxlbmFtZSA9ICV2ZXJzaW9uDQolZGVzY3JpcHRpb24gLW4gIHB5 dGhvbi0lbW9kdWxlbmFtZS1kb2MNCiVtb2R1bGVuYW1lIHByb3ZpZGVzIHBvcnRhYmxlIHdh eSB0byBhY2Nlc3Mgc2VyaWFsIHBvcnRzIGluIHZhcmlvdXMNCnN5c3RlbXMuIEluc3RhbGwg cHl0aG9uLSVtb2R1bGVuYW1lLWRvYyBpZiB5b3UgbmVlZCBBUEkgZG9jdW1lbnRhdGlvbg0K YW5kIGV4YW1wbGVzIGZvciB0aGlzIG1vZHVsZQ0KDQolZGVzY3JpcHRpb24gLW4gIHB5dGhv bi0lbW9kdWxlbmFtZS1kb2MgLWwgcnVfUlUuVVRGLTgNCiVtb2R1bGVuYW1lINC/0YDQtdC0 0L7RgdGC0LDQstC70Y/QtdGCINGD0L3QuNGE0LjRhtC40YDQvtCy0LDQvdC90YvQuSDQtNC+ 0YHRgtGD0L8g0Log0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0LzRgw0K0L/QvtGA 0YLRgyDQsiDRgNCw0LfQvdGL0YUg0YHQuNGB0YLQtdC80LDRhS4g0KPRgdGC0LDQvdC+0LLQ uNGC0LUgcHl0aG9uLSVtb2R1bGVuYW1lLWRvYywg0LXRgdC70Lgg0JLQsNC8DQrRgtGA0LXQ sdGD0LXRgtGB0Y8g0LTQvtC60YPQvNC10L3RgtCw0YbQuNGPINC/0L4gQVBJINC4INC/0YDQ uNC80LXRgNGLINC/0YDQvtCz0YDQsNC80LzQuNGA0L7QstCw0L3QuNGPINGBDQrQuNGB0L/Q vtC70YzQt9C+0LLQsNC90LjQtdC8INC00LDQvdC90L7Qs9C+INC80L7QtNGD0LvRjy4NCg0K JXByZXANCg0KJXNldHVwIC1xIC1uICVtb2R1bGVuYW1lLSV2ZXJzaW9uDQoNCiVidWlsZA0K bWtkaXIgLXAgYnVpbGRyb290DQoNCiMgVW5mb3J0dW5hdGVseSBidWlsZCBhbmQgaW5zdGFs bCBzdGVwcyBzaG91bGQgYmUgZG9uZSBhdCBvbmNlDQojIGJlY2F1c2Ugb3RoZXJ3aXNlIC5w eW8gZmlsZXMgd29uJ3QgZ2V0IGludG8gSU5TVEFMTEVEX0ZJTEVTDQojIHJlY29yZA0KDQpD RkxBR1M9IiVvcHRmbGFncyIgJV9fcHl0aG9uIHNldHVwLnB5IFwNCglpbnN0YWxsIC0tb3B0 aW1pemU9MiBcDQoJCS0tcm9vdD1gcHdkYC9idWlsZHJvb3QgXA0KCQktLXJlY29yZD1JTlNU QUxMRURfRklMRVMNCiVpbnN0YWxsDQoNCmNwIC1wciBidWlsZHJvb3QgJWJ1aWxkcm9vdC8N Cg0KdW5zZXQgUlBNX1BZVEhPTg0KDQolZmlsZXMgLWYgSU5TVEFMTEVEX0ZJTEVTDQolZG9j IGNoYW5nZXMudHh0IHJlYWRtZS50eHQNCg0KJWZpbGVzIC1uIHB5dGhvbi0lbW9kdWxlbmFt ZS1kb2MNCiVkb2MgZXhhbXBsZXMNCg0KDQolY2hhbmdlbG9nDQoqIFdlZCBKYW4gMTQgMjAw NCBBbGV4ZXkgTW9yb3pvdiA8bW9yb3pvdkBhbHRsaW51eC5vcmc+IDIuMC1hbHQxDQotIElu aXRpYWwgYnVpbGQgZm9yIEFMVCBMaW51eA0K --Yylu36WmvOXNoKYn Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=python %check_python_version_internal() \ %{expand: %{expand:%%{?_with_python%{2}:%%{?__python_package_version:%%%%{error:Only one python version can be selected at a time}}}}} \ %(echo %{expand:%%{?_with_python%{2}:%%{?__python_package_version:BuildConflicts: python = %{1}}}}) \ %(echo %{expand:%%{?_with_python%{2}:BuildPreReq: python = %{1}}}) \ %{expand: %{expand:%%{?_with_python%{2}:%%%%global __python %(which python%1 2>/dev/null || echo /bin/false)}}} \ %{expand: %{expand:%%{?_with_python%{2}:%%{!?__python_package_version:%%%%global __python_package_version %2}}}} %check_python_version() \ %{expand: %%check_python_version_internal %{1} %(echo %1 | sed -e 's/\\.//g')} %setup_python_module() \ %{expand: %%global modulename %{1}} \ %(echo Provides: python-%{1} = %version-%release) \ %check_python_version 2.2 \ %check_python_version 2.3 \ %check_python_version 2.4 \ %{expand: %{expand: %%{!?__python_package_version:%%%%global __python_package_version %%%%nil}}} \ %{expand: %%global packagename python%%{__python_package_version}-%%{modulename}} \ %(echo %{expand:Requires: python = %%__python_version}) --Yylu36WmvOXNoKYn-- --QRj9sO5tAVLaXnSD Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (GNU/Linux) iD8DBQFAN0L2X5DZdJn19V0RAi8VAJ4iqAfVwI1JlitDfeLlnd/daD36NQCeJ38J STan2pXp6TZ2gcEPfiqdqKw= =Gqk8 -----END PGP SIGNATURE----- --QRj9sO5tAVLaXnSD--