Как распространять файлы и иконки `.desktop` для пакета Python в Gnome (с помощью distutils или setuptools)?
-
20-08-2019 - |
Вопрос
В настоящее время я использую автоинструменты для сборки / установки и упаковки своего проекта, но мне бы действительно хотелось перейти к чему-то более "питоническому".
Мой проект состоит из двух скриптов, одного модуля, двух описаний графического интерфейса 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
, это более узкий по объему и, ИМХО, более питонический (явный лучше, чем неявный).