Развертывание модулей Python в системе Ubuntu с помощью distutils и deb

Я работаю над упаковкой некоторых библиотек в deb с помощью 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 на локальном сервере, который добавляется как зависимость пакета для других наших программ.

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


person Paul Nathan    schedule 07.02.2012    source источник
comment
Ваш пакет совместим как с 2.x, так и с 3.x? То есть вы нацелены на оба?   -  person nfirvine    schedule 08.02.2012


Ответы (2)


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

Для получения дополнительной информации вы можете просмотреть этот недавний доклад на Неделя разработчиков Ubuntu.

person jcollado    schedule 07.02.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 [email protected] (другие варианты см. в 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.

person nfirvine    schedule 08.02.2012