Как использовать Python distutils?

Я написал быструю программу на Python, чтобы добавить графический интерфейс gtk к программе cli. Мне было интересно, как я могу создать установщик с помощью distutils. Поскольку это просто интерфейс с графическим интерфейсом для приложения командной строки, он в любом случае работает только в * nix, поэтому я не беспокоюсь о том, что это кроссплатформенный.

Моя основная цель - создать пакет .deb для пользователей debian / ubuntu, но я не разбираюсь в файлах make / configure. До сих пор я в основном был веб-разработчиком.

редактировать: Кто-нибудь знает о проекте, который использует distutils, чтобы я мог увидеть его в действии и, знаете, действительно попробовать его создать?

Вот несколько полезных ссылок

  • Руководство по упаковке Ubuntu Python

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

  • Проект Ubuntu MOTU

    Это официальный проект поддержки пакетов в ubuntu. Присоединиться может любой желающий, и существует множество руководств и информации о создании пакетов всех типов, включая приведенное выше «руководство по упаковке Python».

  • "Python распространяется на deb?" - Обсуждение на форуме Ars Technica

    Согласно этому разговору, вы не можете просто использовать distutils. Он не соответствует формату упаковки debian (или чему-то в этом роде). Я думаю, поэтому вам нужен dh_make, как показано в руководстве по упаковке Ubuntu

  • "Команда bdist_deb для distutils

    В этом есть интересное обсуждение (также как я нашел руководство по ubuntu) о соединении zip-файла и сценария оболочки для создания какого-то универсального исполняемого файла (что-нибудь с python и bash). странный. Сообщите мне, если кто-нибудь найдет больше информации об этой практике, потому что я никогда о ней не слышал.

  • Описание формата deb и его соответствия distutils - список рассылки python

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
25
0
10 486
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

См. простой пример 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']) 
          ])

может ли путь data_files быть абсолютным? У меня ValueError: путь '/ etc / Package3' не может быть абсолютным

Sake 24.05.2011 15:13

Плюс 1 для «Инитек» - единственное, что было бы лучше, это «Пласт-троль-тек».

Ben DeMott 27.09.2011 00:37

Большинство программ Python будут использовать distutils. Джанго - это единица - см. http://code.djangoproject.com/svn/django/trunk/setup.py

Вам также следует прочитать документация, так как он очень подробный и содержит несколько хороших примеров.

distutils действительно не так уж и сложен, как только вы освоите его. На самом деле это просто вопрос ввода некоторой метаинформации (название программы, автор, версия и т. д.), А затем выбора файлов, которые вы хотите включить. Например, вот образец модуля distutils setup.py из довольно сложной библиотеки Python:

Камаэлия setup.py

Обратите внимание, что это не касается файлов данных или чего-то еще, поэтому YMMV.

С другой стороны, я согласен с тем, что документация distutils, вероятно, является одной из худших документов Python. В одних областях он чрезвычайно инклюзивен, но в других упускает из виду некоторую действительно важную информацию.

Я нашел следующий руководство очень полезным. Он короче, чем документация distutils, и объясняет, как шаг за шагом настроить типичный проект.

apt-get install python-stdeb

Утилита преобразования пакетов исходного кода Python в Debian

Этот пакет предоставляет некоторые инструменты для создания пакетов Debian из пакетов Python с помощью новой команды distutils, sdist_dsc. Для пакета Debian предусмотрены автоматические значения по умолчанию, но многие аспекты полученного пакета можно настроить с помощью файла конфигурации.

  • pypi-install запросит индекс пакета Python (PyPI) для пакет, загрузите его, создайте из него .deb, а затем установите файл .deb.
  • py2dsc преобразует tar-архив с исходным кодом, созданный с помощью distutils, в Debian исходный пакет.

Другие вопросы по теме