Как использовать дистрибутивы Python?
Вопрос
Я написал быструю программу на Python, чтобы добавить графический интерфейс gtk в программу cli.Мне было интересно, как я могу создать установщик с помощью distutils.Поскольку это всего лишь графический интерфейс для приложения командной строки, он в любом случае работает только в *nix, поэтому я не беспокоюсь о том, что он кроссплатформенный.
моя главная цель — создать пакет .deb для пользователей debian/ubuntu, но я не понимаю файлы make/configure.До сих пор я в основном был веб-разработчиком.
редактировать:Кто-нибудь знает проект, в котором используются distutils, чтобы я мог увидеть его в действии и, ну, знаете, попробовать его создать?
Вот несколько полезных ссылок
Руководство по упаковке Ubuntu Python
Это руководство очень полезный.Не знаю, как я пропустил это во время первой волны гулинга.Он даже поможет вам собрать существующее приложение Python.
-
Это официальный проект поддержки пакета в Ubuntu.Присоединиться может каждый, и существует множество учебных пособий и информации о создании пакетов всех типов, включая приведенное выше «Руководство по упаковке Python».
"Python Distutils для Деб?" - Обсуждение Ars Technica Forum
Согласно этому разговору, вы не можете просто использовать 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 = "that.guy@initech.com",
version = '1.0.5',
package_dir = {'Package3' : 'site-packages/Package3'},
packages = ['Package3', 'Package3.Queries'],
data_files = [
('/etc/Package3', ['etc/Package3/ExternalResources.conf'])
])
Другие советы
apt-get install python-stdeb
Утилита преобразования исходного пакета Python в Debian
Этот пакет предоставляет некоторые инструменты для создания пакетов Debian из пакетов Python с помощью новой команды distutils, sdist_dsc.Для пакета Debian предусмотрены автоматические настройки по умолчанию, но многие аспекты полученного пакета можно настроить с помощью файла конфигурации.
- PYPI-Install запросит индекс пакета Python (PYPI) для пакета, загрузите его, создаст из него .deb, а затем установит .deb.
- PY2DSC преобразует исходную Tarball, созданный Distutils, в исходный пакет Debian.
Большинство программ Python используют distutils. Джанго один - см. http://code.djangoproject.com/svn/django/trunk/setup.py
Вам также следует прочитать документация, поскольку он очень обширен и содержит несколько хороших примеров.
Я нашел следующее руководство быть очень полезным.Он короче документации по distutils и объясняет, как шаг за шагом настроить типичный проект.
Distutils на самом деле не так уж и сложен, если вы освоите его.На самом деле это просто вопрос ввода некоторой метаинформации (название программы, автор, версия и т. д.), а затем выбора файлов, которые вы хотите включить.Например, вот пример модуля distutils setup.py из достаточно сложной библиотеки Python:
Обратите внимание, что это не касается каких-либо файлов данных или чего-то еще, поэтому YMMV.
С другой стороны, я согласен, что документация по distutils, вероятно, является одной из худших документации по Python.В некоторых областях он чрезвычайно инклюзивный, но в других игнорирует действительно важную информацию.