根据安装的版本,我可以为 Python2 和 Python3 分别拥有一个 .desktop 启动器吗?

根据安装的版本,我可以为 Python2 和 Python3 分别拥有一个 .desktop 启动器吗?

在解决了极少数问题之后,我将应用程序从 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

但我希望它能做的是

  1. 如果安装了 Python3,则使用 Python3 解释器启动应用程序。
  2. 否则,如果未安装 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)

相关内容