Como distribuir arquivos `.desktop` e ícones para um pacote de Python no Gnome (com distutils ou setuptools)?
-
20-08-2019 - |
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?
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).