Search code examples
pythonpackagingsetuptoolsgnomedistutils2

How to distribute `.desktop` files and icons for a Python package in Gnome (with distutils or setuptools)?


Currently I'm using the auto-tools to build/install and package a project of mine, but I would really like to move to something that feels more "pythonic".

My project consists of two scripts, one module, two glade GUI descriptions, and two .desktop files. It's currently a pure python project, though that's likely to change soon-ish.

Looking at setuptools I can easily see how to deal with everything except the .desktop files; they have to end up in a specific directory so that Gnome can find them.

Is using distuils/setuptools a good idea to begin with?


Solution

  • I managed to get this to work, but it kinda feels to me more like a workaround.

    Don't know what's the preferred way to handle this...

    I used the following setup.py file (full version is here):

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

    The starter script trough entry_points works. But the data_files where put in an egg file and not in the folders specified, so they can't be accessed by the desktop shell.

    To work around this, I used the following setup.cfg file:

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

    This works. Both data files are created in the right place and the .desktop file is recognized by Gnome.