¿Cómo distribuir archivos e iconos `.desktop` para un paquete de Python en Gnome (con distutils o setuptools)?

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

Pregunta

Actualmente estoy usando las herramientas automáticas para construir / instalar y empaquetar un proyecto mío, pero realmente me gustaría pasar a algo que se sienta más " pythonic ".

Mi proyecto consta de dos scripts, un módulo, dos descripciones de la GUI de Glade y dos archivos .desktop. Actualmente es un proyecto de Python puro, aunque es probable que cambie pronto.

Mirando las herramientas de configuración, puedo ver fácilmente cómo lidiar con todo, excepto los archivos .desktop; tienen que terminar en un directorio específico para que Gnome pueda encontrarlos.

¿Es una buena idea usar distuils / setuptools para empezar?

¿Fue útil?

Solución

Me las arreglé para que esto funcione, pero me parece más como una solución .

No sé cuál es la forma preferida de manejar esto ...

Utilicé el siguiente archivo setup.py (la versión completa es aquí ):

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

La secuencia de comandos de inicio entry_points funciona. Pero el data_files se colocó en un archivo de huevo y no en las carpetas especificadas, por lo que el shell del escritorio no puede acceder a ellos.

Para solucionar esto, utilicé el siguiente archivo setup.cfg:

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

Esto funciona. Ambos archivos de datos se crean en el lugar correcto y Gnome reconoce el archivo .desktop.

Otros consejos

En general, sí, todo es mejor que las herramientas automáticas al crear proyectos de Python.

Tengo buenas experiencias con setuptools hasta ahora. Sin embargo, instalar archivos en ubicaciones fijas no es una fortaleza de las herramientas de configuración; después de todo, no es algo para construir instaladores para aplicaciones Python, sino para distribuir bibliotecas Python.

Para la instalación de archivos que no son archivos de datos de aplicaciones (como imágenes, archivos de interfaz de usuario, etc.) pero que proporcionan integración en el sistema operativo, es mejor usar un formato de empaquetado real (como RPM o deb).

Dicho esto, nada le impide tener el proceso de compilación basado en herramientas de configuración y un pequeño archivo de creación para instalar todo en el lugar que le corresponde.

Puede intentar usar python-distutils-extra . El módulo DistUtilsExtra.auto automáticamente admite archivos .desktop, así como archivos .ui de Glade / GtkBuilder, módulos y scripts Python, archivos de datos misceláneos, etc.

Debería funcionar tanto con Distutils como con las herramientas de configuración.

He creado https://pypi.python.org/pypi/install-freedesktop . Crea archivos .desktop automáticamente para los puntos de entrada gui_scripts, que se pueden personalizar mediante un argumento de configuración, y admite --user así como la instalación en todo el sistema. En comparación con DistUtilsExtra, tiene un alcance más limitado y, en mi humilde opinión, es más pitónico (explícito es mejor que implícito).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top