使用setup.py安装.desktop文件

时间:2014-08-13 11:25:07

标签: python linux pip

我有一个python应用程序应该可以通过GUI启动,因此它必须在/ usr / share / applications /中有一个.desktop文件。该应用程序仅支持Linux。通常,pip会将所有文件安装在一个目录中,但可以使用data_files = []在setup.py中指定其他位置(例如.desktop文件)。

在这种情况下,这被认为是一个很好的解决方案,还是应该只在特定于发行版的软件包中发生(例如.rpm / .deb / .ebuild)?

2 个答案:

答案 0 :(得分:2)

是的,您可以在.desktop脚本中定义setup.py的安装路径。

您可以这样做,因为您知道要安装它的位置,特定于分发。它由Freedesktop Specififications松散定义。

通常,桌面文件位于以下目录中:

  • /usr/share/applications
  • /usr/local/share/applications
  • ~/.local/share/applications

没有任何参考说明,但如果您想了解更多信息,可以查看Desktop Entry SpecificationXDG 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目录及其子目录。