Как распространять файлы `.desktop` и значки для пакета Python в Gnome (с помощью distutils или setuptools)?

В настоящее время я использую автоинструменты для сборки/установки и упаковки моего проекта, но мне бы очень хотелось перейти к чему-то более «питоновскому».

Мой проект состоит из двух скриптов, одного модуля, двух описаний GUI Glade и двух файлов .desktop. В настоящее время это чистый проект Python, хотя это, вероятно, скоро изменится.

Глядя на setuptools, я легко вижу, как работать со всем, кроме файлов .desktop; они должны оказаться в определенном каталоге, чтобы Gnome мог их найти.

Является ли использование distuils/setuptools хорошей идеей для начала?


person Magnus    schedule 01.02.2009    source источник
comment
Я знаю, что с тех пор прошло 9 лет, но MANIFEST.in должно быть недостаточно для добавление любого файла без кода?   -  person jar    schedule 20.11.2018


Ответы (4)


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

Не знаю, какой предпочтительный способ справиться с этим...

Я использовал следующий файл setup.py (полная версия находится здесь):

from setuptools import setup

setup(
  # ...
  data_files=[
    ('share/icons/hicolor/scalable/apps', ['data/mypackage.svg']),
    ('share/applications', ['data/mypackage.desktop'])
  ],
  entry_points={
    'console_scripts': ['startit=mypackage.cli:run']
  }
)

Стартовый скрипт через entry_points работает. Но data_files помещается в файл яйца, а не в указанные папки, поэтому оболочка рабочего стола не может получить к ним доступ.

Чтобы обойти это, я использовал следующий файл setup.cfg:

[install]
single-version-externally-managed=1
record=install.txt

Это работает. Оба файла данных создаются в нужном месте, и файл .desktop распознается Gnome.

person Brutus    schedule 09.06.2014
comment
Это хорошее начало, но оно не работает с --user, так как /usr/bin должен быть жестко запрограммирован для Exec в файле .desktop. Вы можете не указывать путь, но тогда он должен быть в $PATH окружения рабочего стола, чего обычно нет в ~/.local/bin. Также обратите внимание, что --single-version-externally-managed не требуется для pip, поскольку он не использует яйца. - person jwelsh; 26.01.2015
comment
@Brutus Я знаю, что с тех пор прошло 9 лет, но MANIFEST.in не должно быть достаточно для добавление любого файла без кода? - person jar; 20.11.2018

В целом да — все лучше автоинструментов при сборке Python-проектов.

До сих пор у меня есть хороший опыт работы с setuptools. Однако установка файлов в фиксированные места не является сильной стороной инструментов установки — в конце концов, это не создание установщиков для приложений Python, а распространение библиотек Python.

Для установки файлов, которые не являются файлами данных приложения (например, изображения, файлы пользовательского интерфейса и т. д.), но обеспечивают интеграцию в операционную систему, вам лучше использовать реальный формат упаковки (например, RPM или deb).

Тем не менее, ничто не мешает вам иметь процесс сборки, основанный на setuptools и небольшом make-файле для установки всего на свое законное место.

person Torsten Marek    schedule 01.02.2009
comment
Итак, вы говорите, что нет ничего pythonic для создания/упаковки приложений, написанных на python? Это немного разочаровывает. - person Magnus; 02.02.2009
comment
Упаковка приложений зависит от операционной системы, а не от языка программирования. Пакет приложения (с установщиком и т. д.) в Windows должен соответствовать другим требованиям, чем пакет .deb или приложение Mac OS X. - person Torsten Marek; 02.02.2009
comment
Упаковка для операционной системы значительно упрощается за счет выбора хорошей среды сборки. Многие среды сборки также удваиваются как упрощенные системы упаковки, часто только исходные коды, например. автоинструменты, distutils, рубиновые драгоценные камни, ... возможно, система распределения - лучший термин. - person Magnus; 03.02.2009
comment
Вернитесь к исходному вопросу, пожалуйста! Существует ли среда сборки для приложений, написанных на Python, которая лучше (более питоническая), чем автоинструменты? (Помня, что мне нужно установить файлы в фиксированные места.) - person Magnus; 03.02.2009

Вы можете попробовать использовать python-distutils-extra. Модуль DistUtilsExtra.auto автоматически поддерживает файлы .desktop, а также файлы Glade/GtkBuilder .ui, модули и скрипты Python, различные файлы данных и т. д.

Он должен работать как с Distutils, так и с Setuptools.

person Danilo Piazzalunga    schedule 18.02.2010

Я создал https://pypi.python.org/pypi/install-freedesktop. . Он автоматически создает файлы .desktop для точек входа gui_scripts, которые можно настроить с помощью аргумента установки, и поддерживает --user, а также общесистемную установку. По сравнению с DistUtilsExtra он более узкий по объему и ИМХО более питонический (явный лучше, чем неявный).

person jwelsh    schedule 26.01.2015