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

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

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

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

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

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.

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

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

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

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

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

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

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

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