Comment distribuer des fichiers `.desktop` et des icônes pour un paquet Python dans Gnome (avec distutils ou setuptools)?

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

Question

Actuellement, j'utilise les outils automatiques pour construire / installer et emballer un de mes projets, mais j'aimerais vraiment passer à quelque chose qui ressemble davantage à & "pythonic &".

Mon projet comprend deux scripts, un module, deux descriptions d'interface graphique Glade et deux fichiers .desktop. C’est actuellement un projet pur en python, même si cela va bientôt changer rapidement.

En regardant setuptools, je peux facilement voir comment gérer tout sauf les fichiers .desktop; ils doivent se retrouver dans un répertoire spécifique pour que Gnome puisse les trouver.

L'utilisation de distuils / setuptools est-elle une bonne idée pour commencer?

Était-ce utile?

La solution

J'ai réussi à faire en sorte que cela fonctionne, mais cela me donne plutôt l'impression d'une solution de contournement .

Je ne sais pas quel est le moyen préféré pour gérer cela ...

J'ai utilisé le fichier setup.py suivant (la version complète est ici ):

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']
  }
)

Le script de démarrage via entry_points fonctionne. Mais les data_files sont placés dans un fichier d'oeufs et non dans les dossiers spécifiés, de sorte qu'ils ne sont pas accessibles par le shell du bureau.

Pour résoudre ce problème, j'ai utilisé le setup.cfg fichier suivant:

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

Cela fonctionne. Les deux fichiers de données sont créés au bon endroit et le .desktop fichier est reconnu par Gnome.

Autres conseils

En général, oui, tout est préférable aux outils automatiques pour la construction de projets Python.

J'ai de bonnes expériences avec setuptools jusqu'à présent. Cependant, installer des fichiers dans des emplacements fixes n’est pas une force de setuptools. Après tout, ce n’est pas une tâche de créer des installateurs pour les applications Python, mais de distribuer des bibliothèques Python.

Pour l’installation de fichiers qui ne sont pas des fichiers de données d’application (tels que des images, des fichiers d’interface utilisateur, etc.) mais qui offrent une intégration dans le système d’exploitation, il est préférable d’utiliser un format d’emballage réel (comme RPM ou deb).

Ceci étant dit, rien ne vous empêche de disposer du processus de construction basé sur setuptools et d'un petit fichier de création pour tout installer à sa place.

Vous pouvez essayer d'utiliser python-distutils-extra . Le module DistUtilsExtra.auto automatiquement prend en charge les fichiers .desktop, ainsi que les fichiers .ui Glade / GtkBuilder, les modules et scripts Python, les fichiers de données divers, etc.

Cela devrait fonctionner à la fois avec Distutils et Setuptools.

J'ai créé https://pypi.python.org/pypi/install-freedesktop . Il crée automatiquement des fichiers .desktop pour les points d’entrée gui_scripts, qui peuvent être personnalisés à l’aide d’un argument de configuration, et prend en charge --user ainsi que l’installation à l’échelle du système. Par rapport à DistUtilsExtra, sa portée est plus étroite et son IMHO plus pythonique (explicite vaut mieux qu'implicite).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top