我有一个python应用程序应该可以通过GUI启动,因此它必须在/ usr / share / applications /中有一个.desktop文件。该应用程序仅支持Linux。通常,pip会将所有文件安装在一个目录中,但可以使用data_files = []在setup.py中指定其他位置(例如.desktop文件)。
在这种情况下,这被认为是一个很好的解决方案,还是应该只在特定于发行版的软件包中发生(例如.rpm / .deb / .ebuild)?
答案 0 :(得分:2)
是的,您可以在.desktop
脚本中定义setup.py
的安装路径。
您可以这样做,因为您知道要安装它的位置,不特定于分发。它由Freedesktop Specififications松散定义。
通常,桌面文件位于以下目录中:
/usr/share/applications
/usr/local/share/applications
~/.local/share/applications
没有任何参考说明,但如果您想了解更多信息,可以查看Desktop Entry Specification和XDG Base Directory Specification。
因此,您知道要安装在share/applications
中。但那之前的前缀怎么样?答案是,作为开发人员,您不必关心这一点。由打包者来决定。
所以,这是你在setup.py
中的表现方式。
from setuptools import setup
setup(
name = 'myapplication',
version = '0.1',
packages = ['myapplication'],
data_files = [
('share/applications', ['data/org.myapplication.desktop']),
],
)
如您所见,我们提供的目录(share/applications
)是相对。引用蟒蛇的writing setup script:
如果directory是相对路径,则相对于安装前缀(Python的纯Python包的sys.prefix,包含扩展模块的包的sys.exec_prefix)进行解释。
由于这一点,当打包者设置安装前缀(通常为/usr
或/usr/local
)时,您的桌面文件将安装在正确的位置。
顺便说一句,谈论桌面文件时,请务必阅读有关naming conventions的部分:
...应遵循“反向DNS”惯例,例如org.example.FooViewer.desktop。
BTW2,与本页所述相反,您的文件的Exec
行不需要绝对路径。查看系统上安装的文件,几乎没有人这样做。
grep Exec= /usr/share/applications/*.desktop
答案 1 :(得分:0)
这听起来像是一个很好的方法,但也许不是将.desktop
文件放在系统范围的/usr/share/applications/
文件夹中,您可以将文件放在~/.local/share/applications
的用户应用程序文件夹中
这也不需要提升权限来访问root拥有的/user
目录及其子目录。