在解决了极少数问题之后,我将应用程序从 Python2 移到了 Python3,以确保它仍可在 Python 2.7 下运行,因此仅将 python >= 2.7 作为依赖项。
这样做主要是因为 Python3 和一些依赖项未在默认的 12.04 LTS 中安装,并且我不希望我的用户必须安装所有 Python3 才能运行我的脚本。
当我创建 appname.desktop 启动器时,我现在需要决定它是否使用 Python2 或 Python3 启动我的应用程序
EXEC=python /path/app.py
EXEC=python3 /path/app.py
但我希望它能做的是
- 如果安装了 Python3,则使用 Python3 解释器启动应用程序。
- 否则,如果未安装 Python3,则使用 Python2。
如何做到这一点? 我是否需要在软件包安装脚本中说明这一点,或者我是否可以有一个可以同时处理两者的启动器(以防人们在安装我的脚本后安装 Python3)?
答案1
这听起来太明显了,没有好的答案,但是......
为什么不将 bash 脚本用作应用程序二进制文件。我的意思是将 bash 脚本放入 /usr/bin/ 中,检查 python3,然后运行实际脚本。
启动器将仅指向 bash 脚本。
它甚至可以从命令行工作(因为只有 bash 脚本在 PATH 上)。
答案2
我会在我的脚本中这样做setup.py
。大致如下(未经测试):
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)