Come distribuire file e icone `.desktop` per un pacchetto Python in Gnome (con distutils o setuptools)?

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

Domanda

Attualmente sto usando gli strumenti automatici per costruire / installare e impacchettare un mio progetto, ma mi piacerebbe davvero passare a qualcosa che sembra più " pythonic ".

Il mio progetto consiste in due script, un modulo, due descrizioni della GUI di glade e due file .desktop. Al momento è un progetto Python puro, anche se probabilmente cambierà presto.

Guardando setuptools posso facilmente vedere come gestire tutto tranne i file .desktop; devono finire in una directory specifica in modo che Gnome possa trovarli.

L'uso di distuils / setuptools è una buona idea per cominciare?

È stato utile?

Soluzione

Sono riuscito a farlo funzionare, ma mi sembra più una soluzione alternativa .

Non so quale sia il modo preferito di gestire questo ...

Ho usato il seguente setup.py file (la versione completa è qui ):

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

Lo script iniziale entry_points funziona. Ma il data_files dove si trova in un file uovo e non nelle cartelle specificate, quindi non è possibile accedervi dalla shell del desktop.

Per aggirare il problema, ho usato il seguente setup.cfg file:

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

Funziona. Entrambi i file di dati vengono creati nel posto giusto e il .desktop file viene riconosciuto da Gnome.

Altri suggerimenti

In generale, sì: tutto è meglio degli autotools quando si costruiscono progetti Python.

Finora ho avuto buone esperienze con setuptools. Tuttavia, l'installazione di file in percorsi fissi non è un punto di forza degli strumenti di installazione - dopo tutto, non è qualcosa per costruire installatori per app Python, ma distribuire librerie Python.

Per l'installazione di file che non sono file di dati dell'applicazione (come immagini, file UI ecc.) ma forniscono integrazione nel sistema operativo, è meglio usare un formato di packaging reale (come RPM o deb).

Detto questo, nulla ti impedisce di avere il processo di compilazione basato su setuptools e un piccolo file make per installare tutto al posto giusto.

Puoi provare a usare python-distutils-extra . Il modulo DistUtilsExtra.auto automaticamente supporta i file .desktop, nonché i file .ui di Glade / GtkBuilder, i moduli e gli script Python, i file di dati vari, ecc.

Dovrebbe funzionare sia con Distutils che con Setuptools.

Ho creato https://pypi.python.org/pypi/install-freedesktop . Crea automaticamente i file .desktop per i punti di ingresso gui_scripts, che possono essere personalizzati tramite un argomento di installazione e supporta --user nonché l'installazione a livello di sistema. Rispetto a DistUtilsExtra, ha un ambito più ristretto e IMHO più pitonico (esplicito è meglio di implicito).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top