Невозможно получить рабочий лаунчер для программы Python

Невозможно получить рабочий лаунчер для программы Python

Я создаю совершенно новый пакет Debian , cpconverterкоторый представляет собой A simple utility to change the code page of plain text based files, из исходного кода, опубликованного в Google Code.

Все прошло хорошо. Однако я не могу получить работающий лаунчер launchpad.

Файл Python cpConverter.pyхранится в папке /usr/share/cpconverter/cpconverter/.

У меня есть папка Shell Scriptс именем , в которой написано:cpconverter/usr/bin/

#!/bin/sh

python /usr/share/cpconverter/cpconverter/cpConverter.py

Desktop Launcher cpconverter.desktopпрост

[Desktop Entry]
Version=0.5
Encoding=UTF-8
Name=Code Page Converter
Name[en_US]=Code Page Converter
Comment=A simple utility to change the code page of plain text based files
Type=Application
Exec=/usr/bin/cpconverter
Icon=cpconverter
Terminal=false
StartupNotify=true
Categories=Utility;

Однако запустить его не удалось.

Я проверил, что установленная версия cpConverter.pyработает нормально, запустив ее:

$ python /usr/share/cpconverter/cpconverter/cpConverter.py

Затем программа запускается в некоторых случаях. После нажатия на лаунчер она часто больше не работает.

Однако файл cpConverter.pyв структуре здания пакета всегда работает, например

$ python cpconverter-0.5/debian/cpconverter/usr/share/cpconverter/cpconverter/cpConverter.py

Я попытался ввести ту же командную строку из Терминала, но затем получил ряд неслыханных ошибок (по крайней мере, для меня):

$ cpconverter
/usr/bin/cpconverter: 3: /usr/bin/cpconverter: pyhton: not found
$ 
$ pyhton /usr/share/cpconverter/cpconverter/cpConverter.py
No command 'pyhton' found, did you mean:
 Command 'python' from package 'python-minimal' (main)
pyhton: command not found
$

Затем я попытался взять рабочий пример для пакета, convertallкоторый для его Shell Scriptиспользования:

#!/bin/sh

exec /usr/bin/python3 /usr/share/convertall/convertall.py "$@"

Из Терминала я бы успешно запустил его с помощью:

$ python3 /usr/share/convertall/convertall.py "$@"

Затем я изменил текст Shell Scriptследующим образом:

exec /usr/bin/python2 /usr/share/cpconverter/cpConverter.py "$@"

Результат по-прежнему тот, что Desktop Launcher не работает... какие-то песочные часы и ничего. Однако любая из этих 3 командных строк всегда запускает программу:

$ python2 /usr/share/cpconverter/cpconverter/cpConverter.py "$@"
$ /usr/bin/cpconverter
$ cpconverter

Права доступа стандартны cpconverter.desktop:

$ ls -l /usr/share/applications/clipgrab.desktop
-rw-r--r-- 1 root root 626 Dec  9  2014 /usr/share/applications/clipgrab.desktop

Почему тогда Desktop Launcher не может запустить программу? Что не так с моим Desktop Launcher? [См. выше]

решение1

Я не уверен, действительно ли это необходимо, но когда я делал скрипт bash, я запускал его с помощью этой команды "bash $$$$$$$.sh". Единственная причина, по которой я об этом упоминаю, заключается в том, что расширения .py нет в имени скрипта в вашем лаунчере. Может и ничего, стоит посмотреть и попробовать. Крейг

решение2

Ну, как я уже сказал в комментарии, запуск Dash Scriptиз /usr/bin/каталога, как это делает лаунчер на рабочем столе, завершился с этой ошибкой Python:

/usr/bin$ cpconverter
Traceback (most recent call last):
  File "/usr/share/cpconverter/cpconverter/cpConverter.py", line 342, in <module>
    app = cpConverter()
  File "/usr/share/cpconverter/cpconverter/cpConverter.py", line 74, in __init__
    builder.add_from_file("./gui/gui.xml")
glib.GError: Failed to open file './gui/gui.xml': No such file or directory
$ 

При запуске cpconverterв командной строке в другом месте домашней папки или в папке /usr/share/cpconverter/cpconverter(где находится файл coCPnverter.py) произойдет успешное завершение.

Тогда стало очевидно, что виновником был тот, кто указан ./в cpConverter.pyделе.

Я просто создал патч, allow-launch-from-usr-bin-script.patchчтобы указать абсолютный путь (после упаковки) вместо относительного пути:

builder.add_from_file("/usr/share/cpconverter/cpconverter/gui/gui.xml")

Это объяснило и решило проблему.

Связанный контент