Python 使用setup.py安装.desktop文件
我有一个python应用程序,应该可以通过GUI启动,因此它必须在/usr/share/applications/中有一个.desktop文件。该应用程序仅支持Linux。通常,pip将所有文件安装在一个目录中,但也可以使用data_files=[]在setup.py中指定其他位置(例如.desktop文件)Python 使用setup.py安装.desktop文件,python,linux,pip,Python,Linux,Pip,我有一个python应用程序,应该可以通过GUI启动,因此它必须在/usr/share/applications/中有一个.desktop文件。该应用程序仅支持Linux。通常,pip将所有文件安装在一个目录中,但也可以使用data_files=[]在setup.py中指定其他位置(例如.desktop文件) 在这种情况下,这被认为是一个很好的解决方案,还是应该只在特定于发行版的软件包(如.rpm/.deb/.ebuild)中发生这种情况?我觉得这是一个很好的方法,但可能不是将.desktop文
在这种情况下,这被认为是一个很好的解决方案,还是应该只在特定于发行版的软件包(如.rpm/.deb/.ebuild)中发生这种情况?我觉得这是一个很好的方法,但可能不是将
.desktop
文件放在系统范围的/usr/share/applications/
文件夹中,您可以将该文件放在用户应用程序文件夹中的~/.local/share/applications
这也不需要提升权限来访问root拥有的
/user
目录及其子目录 是的,您可以在setup.py
脚本中定义.desktop
的安装路径
您可以这样做,因为您知道要安装它的位置,它不是特定于发行版的。它的定义是松散的
通常,桌面文件位于以下目录中:
/usr/share/applications
/usr/local/share/applications
~/.local/share/applications
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
)是相对的。引用蟒蛇的:
如果目录是一个相对路径,它将相对于安装前缀进行解释(纯Python包的Python的sys.prefix,包含扩展模块的包的sys.exec_prefix)
因此,当打包机设置安装前缀(通常是/usr
或/usr/local
)时,您的桌面文件将安装在正确的位置
顺便说一句,谈到桌面文件,请务必阅读以下部分:
。。。应遵循“反向DNS”约定,例如org.example.FooViewer.desktop
顺便说一句,与本页所述相反,在文件的Exec
行中不需要绝对路径。看看你系统上安装的文件,几乎没有人这样做
grep Exec= /usr/share/applications/*.desktop
但是,您可能需要提供可执行文件的完整路径,因为桌面shell可能不会显示。桌面文件的Exec行不能是stat
ed。GNOME shell会这样做。因此,我认为接下来的问题是:如何让setuptools替换它安装的.desktop文件的Exec
行中的路径?@FrederickNord:你是对的,不过,Exec
的状态可能是“仅用可执行文件的名称”指定的。我觉得这很奇怪。作为一种解决方法,以下方法对我来说很好:Exec=bash-c'export PATH=“$PATH:~/.local/bin”;某些可执行文件%U'
的好处是,某些可执行文件的位置可能位于用户的本地树中,也可能位于全局路径中。