Я написал быструю программу на Python, чтобы добавить графический интерфейс gtk к программе cli. Мне было интересно, как я могу создать установщик с помощью distutils. Поскольку это просто интерфейс с графическим интерфейсом для приложения командной строки, он в любом случае работает только в * nix, поэтому я не беспокоюсь о том, что это кроссплатформенный.
Моя основная цель - создать пакет .deb для пользователей debian / ubuntu, но я не разбираюсь в файлах make / configure. До сих пор я в основном был веб-разработчиком.
редактировать: Кто-нибудь знает о проекте, который использует distutils, чтобы я мог увидеть его в действии и, знаете, действительно попробовать его создать?
Руководство по упаковке Ubuntu Python
Это руководство полезно для очень. Не знаю, как я пропустил это во время моей первой волны хулиганства. Он даже проведет вас через упаковку существующего приложения на Python.
Это официальный проект поддержки пакетов в ubuntu. Присоединиться может любой желающий, и существует множество руководств и информации о создании пакетов всех типов, включая приведенное выше «руководство по упаковке Python».
"Python распространяется на deb?" - Обсуждение на форуме Ars Technica
Согласно этому разговору, вы не можете просто использовать distutils. Он не соответствует формату упаковки debian (или чему-то в этом роде). Я думаю, поэтому вам нужен dh_make, как показано в руководстве по упаковке Ubuntu
"Команда bdist_deb для distutils
В этом есть интересное обсуждение (также как я нашел руководство по ubuntu) о соединении zip-файла и сценария оболочки для создания какого-то универсального исполняемого файла (что-нибудь с python и bash). странный. Сообщите мне, если кто-нибудь найдет больше информации об этой практике, потому что я никогда о ней не слышал.
Описание формата deb и его соответствия distutils - список рассылки python






См. простой пример distutils. Это в основном то, на что это похоже, за исключением того, что настоящие сценарии установки обычно содержат немного больше информации. Однако я не видел ничего более сложного в корне. По сути, вы просто даете ему список того, что необходимо установить. Иногда вам нужно дать ему несколько словаря сопоставления, поскольку исходное и установленное деревья могут не совпадать.
Вот реальный (анонимный) пример:
#!/usr/bin/python
from distutils.core import setup
setup (name = 'Initech Package 3',
description = "Services and libraries ABC, DEF",
author = "That Guy, Initech Ltd",
author_email = "[email protected]",
version = '1.0.5',
package_dir = {'Package3' : 'site-packages/Package3'},
packages = ['Package3', 'Package3.Queries'],
data_files = [
('/etc/Package3', ['etc/Package3/ExternalResources.conf'])
])
Плюс 1 для «Инитек» - единственное, что было бы лучше, это «Пласт-троль-тек».
Большинство программ Python будут использовать distutils. Джанго - это единица - см. http://code.djangoproject.com/svn/django/trunk/setup.py
Вам также следует прочитать документация, так как он очень подробный и содержит несколько хороших примеров.
distutils действительно не так уж и сложен, как только вы освоите его. На самом деле это просто вопрос ввода некоторой метаинформации (название программы, автор, версия и т. д.), А затем выбора файлов, которые вы хотите включить. Например, вот образец модуля distutils setup.py из довольно сложной библиотеки Python:
Обратите внимание, что это не касается файлов данных или чего-то еще, поэтому YMMV.
С другой стороны, я согласен с тем, что документация distutils, вероятно, является одной из худших документов Python. В одних областях он чрезвычайно инклюзивен, но в других упускает из виду некоторую действительно важную информацию.
Я нашел следующий руководство очень полезным. Он короче, чем документация distutils, и объясняет, как шаг за шагом настроить типичный проект.
apt-get install python-stdeb
Утилита преобразования пакетов исходного кода Python в Debian
Этот пакет предоставляет некоторые инструменты для создания пакетов Debian из пакетов Python с помощью новой команды distutils, sdist_dsc. Для пакета Debian предусмотрены автоматические значения по умолчанию, но многие аспекты полученного пакета можно настроить с помощью файла конфигурации.
может ли путь data_files быть абсолютным? У меня ValueError: путь '/ etc / Package3' не может быть абсолютным