Como distribuir arquivos `.desktop` e ícones para um pacote de Python no Gnome (com distutils ou setuptools)?

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

Pergunta

Atualmente estou usando o auto-ferramentas para construir / instalar e empacotar um projeto meu, mas eu realmente gostaria de mudar para algo que se sente mais "Pythonic".

Meu projeto consiste em dois scripts, um módulo, duas descrições GUI Glade, e dois arquivos .desktop. É atualmente um projeto de python puro, apesar de que é provável que mudar em breve-ish.

Olhando para setuptools eu posso facilmente ver como lidar com tudo, exceto os arquivos .desktop; eles têm de acabar em um diretório específico para que Gnome pode encontrá-los.

Está usando distuils / setuptools uma boa idéia para começar?

Foi útil?

Solução

eu consegui chegar a este trabalho, mas ele se sente um bocado para mim mais como um solução alternativa .

Não sei o que é a maneira preferida para lidar com isso ...

Eu usei o seguinte arquivo setup.py (versão completa é aqui ):

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

A calha entry_points roteiro arranque funciona. Mas o data_files onde colocou em um arquivo de ovo e não nas pastas especificado, para que eles não podem ser acessados ??pelo shell desktop.

Para contornar isso, usei o seguinte arquivo setup.cfg:

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

Isso funciona. Ambos os arquivos de dados são criados no lugar certo e o arquivo .desktop é reconhecido pelo Gnome.

Outras dicas

Em geral, sim -. Tudo é melhor do que autotools ao construir projetos Python

Eu tenho boas experiências com setuptools até agora. No entanto, a instalação de arquivos em locais fixos não é uma força de setuptools -. Afinal de contas, não é algo para installaters compilação para aplicativos Python, mas distribuir bibliotecas Python

Para a instalação de arquivos que não são arquivos de dados (como imagens, UI arquivos etc), mas proporcionar a integração no sistema operacional, você é melhor fora com o uso de um formato de embalagem real (como RPM ou deb).

Dito isto, nada impede você de ter o processo de construção com base em setuptools e um pequeno arquivo make para instalar tudo em seu devido lugar.

Você pode tentar usar python-distutils-extras . O módulo DistUtilsExtra.auto automaticamente suportes arquivos .desktop, bem como arquivos de Glade / GtkBuilder .ui, módulos Python e scripts, arquivos de dados variados, etc.

Ele deve funcionar tanto com Distutils e Setuptools.

Eu criei https://pypi.python.org/pypi/install-freedesktop . Ele cria os arquivos .desktop automaticamente para os pontos de entrada gui_scripts, que podem ser personalizados através de um argumento de configuração e suportes --user, bem como a instalação de todo o sistema. Comparado com DistUtilsExtra, é mais estreito em escopo e IMHO mais Python (explícita é melhor do que implícito).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top