Как да разпространявате `.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

Като цяло, да - всичко е по-добро от autotools при изграждане на Python проекти.

Имам добър опит с setuptools досега. Инсталирането на файлове във фиксирани местоположения обаче не е силна страна на setuptools - в края на краищата не е нещо за изграждане на инсталатори за приложения на Python, а за разпространение на библиотеки на Python.

За инсталиране на файлове, които не са файлове с данни на приложения (като изображения, UI файлове и т.н.), но предоставят интеграция в операционната система, по-добре е да използвате реален пакетен формат (като RPM или deb).

Въпреки това, нищо не ви спира да имате процеса на изграждане, базиран на setuptools и малък make файл за инсталиране на всичко на правилното му място.

person Torsten Marek    schedule 01.02.2009
comment
И така, искате да кажете, че няма нищо питонично за изграждане/опаковане на приложения, написани на Python? Това е малко разочароващо. - person Magnus; 02.02.2009
comment
Пакетирането на приложения зависи от операционната система, а не от езика за програмиране. Пакет на приложение (с инсталационна програма и т.н.) в Windows трябва да отговаря на различни изисквания от пакет .deb или приложение за Mac OS X. - person Torsten Marek; 02.02.2009
comment
Опаковката за операционна система е значително опростена чрез избор на добра среда за изграждане. Много среди за изграждане също се удвояват като опростени системи за опаковане, често само източник, напр. auto-tools, distutils, ruby ​​gems, ... може би системата за разпространение е по-добър термин. - person Magnus; 03.02.2009
comment
Върнете се към първоначалния въпрос, моля! Има ли среда за изграждане на приложения, написани на Python, която е по-добра (по-pythonic) от автоматичните инструменти? (Имам предвид, че трябва да инсталирам файлове на фиксирани местоположения.) - 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, той е по-тесен по обхват и IMHO по-питоничен (явното е по-добро от скритото).

person jwelsh    schedule 26.01.2015