Развертывание модулей Python в системе Ubuntu с помощью distutils и deb - PullRequest
8 голосов
/ 07 февраля 2012

Я работаю над упаковкой некоторых библиотек в дебют с distutils.

Предположительно , мне нужно правильно настроить setup.py, а также соответствующие /debian файлы для deb.

Прямо сейчас, хранилище выглядит примерно так:

library_name/
 __init__.py
 liba.py
 libb.py
 ...

Он добавляется как зависимость к другим программам, чтобы они могли выполнять from library_name import liba.

Поиск в Google показывает что-то между 3 и 5 различными методами развертывания в Ubuntu, не включая подход easy_install; документация, по-видимому, в основном разбита на части и устарела.

Особенно я стараюсь убедиться, что независимо от версии Python библиотека помещается в правильный системный каталог. Кроме того, конечно, что он может быть удален или обновлен без проблем.

Конечной игрой является создание deb на локальном сервере, который добавляется в качестве зависимости пакета для других наших программ.

Каков канонический «простой и понятный» способ сделать это?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Я уже боролся с упаковкой Python для Ubuntu / Debian и раньше, и я согласен, документы - это беспорядок / несуществующий / вводящий в заблуждение: им действительно нужно руководство по быстрому старту для самой простой возможной ситуации.

Ну, вот оно!

Установите ваши инструменты. Это может быть излишним, хотя:

sudo apt-get install build-essential python-all dh-make devscripts fakeroot

Начните с извлечения кода в каталог с именем $packagename-$version, например library_name-0.6.0/ и cd в этот каталог. Запустите что-то вроде dh_make -i -c gpl3 -e nfirvine@example.com (см. dh_make --help для других опций). Если все пойдет хорошо, вы не получите ошибок, и это создаст загрузку файлов в ./debian. Вы можете проигнорировать или удалить ./debian/*.{ex,EX}; это только примеры.

Вам, вероятно, стоит проверить все эти файлы в какой-то момент, но, по крайней мере, вам потребуется для редактирования ./debian/control и ./debian/rules. Вы должны заполнить все временно контролируемые поля, а именно Description и Homepage. Измените строку Package на python-$libname Измените строку Depends в control на эту:

Depends: ${misc:Depends}, ${python:Depends}

Это гарантирует, что наш бинарный пакет python-$libname зависит от версий Python, в которых он нуждается. (${python:Depends} is a "substvar"; they're created when we build; you can inspect their values after your first build in. / Debian / $ packagename.substvars`.)

Измените строку в rules с dh $@ на dh $@ --with python2, сохранив вкладку спереди (это Makefile). Это заставляет debhelper использовать свое дополнение python2; по умолчанию все еще используется pysupport (что устарело, помните?).

Затем выполните следующую команду в корневом каталоге:

debuild -us -uc

Это собирает пакет, не подписывая его (то, что вы должны узнать, как сделать позже!). Вы должны увидеть несколько знакомых строк setuptools (дважды: один раз для 2.6, один раз для 2.7), кучу аддонов dh_ и другие строительные помехи. В конце выводится lintian, который может обнаружить некоторые распространенные проблемы с упаковкой; Вы должны это исправить. Многие вещи, на которые жалуются lintian и друзья, это просто соблюдение правил упаковки, и если ваша библиотека просто внутренняя, не стесняйтесь играть в нее свободно.

Кстати, На этой странице говорится об устаревании python-support и python-central

2 голосов
/ 08 февраля 2012

Вы можете использовать pkgme для быстрого создания файлов Debian.Насколько я знаю, в отличие от других подобных инструментов, таких как dh-make, pkgme дизайн основан на плагинах, что означает, что при обнаружении Python информация из вашего setup.py файла извлекается правильно.

Для болееинформацию, вы можете посмотреть на это недавнее выступление на Ubuntu Developer Week событие.

...