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

StackOverflow https://stackoverflow.com/questions/501597

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Я использовал следующее 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 где помещается в файл egg, а не в указанные папки, поэтому оболочка рабочего стола не может получить к ним доступ.

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top