Posso ter um Launcher do .desktop para Python2 e Python3 dependendo da versão instalada?

4

Depois de muito poucos problemas, mudei meu aplicativo do Python2 para o Python3, certificando-se de que ele ainda será executado com o Python 2.7 e, portanto, tem python > = 2.7 apenas como dependência.

Isso foi feito principalmente porque o Python3, e algumas dependências não estão instaladas em um 12.04 LTS padrão, e eu não quero que meus usuários tenham que instalar todo o Python3 apenas para executar o meu script.

Quando eu crio um lançador appname.desktop, preciso decidir se ele inicia meu aplicativo usando Python2 ou Python3 como

EXEC=python /path/app.py
EXEC=python3 /path/app.py

Mas o que eu gostaria de fazer é

  1. Inicie o aplicativo com o interpretador Python3 se o Python3 estiver instalado.
  2. Caso contrário, use o Python2 se o Python3 não estiver instalado.

Como isso pode ser feito? Preciso informá-lo no meu script de instalação de pacotes, ou posso ter um lançador que possa lidar com ambos (caso as pessoas instalem o Python3 depois de instalarem o meu script)?

    
por Takkat 30.11.2012 / 10:09

2 respostas

1

Parece óbvio demais para uma boa resposta, mas ...

Por que você não usa um script bash como seu binário de aplicativo. Quero dizer, solte o script / usr / bin / a bash que verifica o python3 e então executa o script real.

O lançador apenas aponta para o script bash.

Ele irá até funcionar a partir da linha de comando (já que somente o script bash estará no PATH).

    
por Javier Rivera 03.12.2012 / 08:48
0

Eu faria isso no meu script setup.py . Aproximadamente assim (não testado):

import sys

template = """[Desktop Entry]
Version=1.0
(...)
Exec=python%s /path/app.py
"""

version = '' if sys.version_info.major == 2 else '3'
with open('myapp.desktop', 'w') as dfile:
    dfile.write(template % version)
    
por Timo 30.11.2012 / 11:56