Как распространять файлы и значки `.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.