我正在构建一个全新的 Debian 包,cpconverter
它是A simple utility to change the code page of plain text based files
来自 Google Code 中发布的源代码。
一切顺利。但是我无法获得可用的启动板启动器。
python 文件cpConverter.py
存储在文件夹中/usr/share/cpconverter/cpconverter/
。
我有一个Shell Script
名为的cpconverter
文件夹/usr/bin/
,其内容为:
#!/bin/sh
python /usr/share/cpconverter/cpconverter/cpConverter.py
桌面启动器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 "$@"
结果仍然是桌面启动器无法工作……只有沙漏,什么都没有。但是,以下 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
那么为什么桌面启动器无法启动程序?我的桌面启动器出了什么问题?[参见上文]
答案1
我不确定这是否真的有必要,但是当我编写 bash 脚本时,我使用此命令“bash $$$$$$$.sh”启动脚本。我提到这一点的唯一原因是桌面启动器中的脚本名称上没有 .py 扩展名。可能没什么,值得一看和尝试。Craig
答案2
好吧,正如我在评论中所说的那样,就像桌面启动器一样Dash Script
从目录运行,失败并出现此 Python 错误:/usr/bin/
/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
$
在主文件夹的其他位置或(coCPnverter.py 文件所在的位置)的cpconverter
提示符下运行时将会成功。/usr/share/cpconverter/cpconverter
那么很明显,罪魁祸首就是文件./
中的那个cpConverter.py
。
我只是创建了一个补丁allow-launch-from-usr-bin-script.patch
来放置绝对路径(一旦打包)而不是相对路径:
builder.add_from_file("/usr/share/cpconverter/cpconverter/gui/gui.xml")
这解释并解决了这个问题。