我有一个python应用程序,应该可以通过GUI启动,所以它必须在/ usr/share/applications /中有一个.desktop文件.该应用程序仅支持Linux.通常,pip会将所有文件安装在一个目录中,但可以使用data_files = []在setup.py中指定其他位置(例如.desktop文件).
在这种情况下,这被认为是一个很好的解决方案,还是应该只在特定于发行版的包中发生(例如.rpm/.deb/.ebuild)?
是的,您可以.desktop
在setup.py
脚本中定义您的安装路径。
您可以这样做,因为您知道要安装它的位置,它不是特定于发行版的。它由Freedesktop 规范松散地定义。
通常,桌面文件位于以下目录中:
/usr/share/applications
/usr/local/share/applications
~/.local/share/applications
没有任何参考资料说明这一点,但如果您想了解更多信息,您可以查看桌面条目规范和XDG 基本目录规范。
所以你知道你想安装在share/applications
. 但是之前的前缀呢?答案是,作为开发人员,您不必关心这些。由包装商决定。
所以,这里是你如何在你的setup.py
.
from setuptools import setup
setup(
name = 'myapplication',
version = '0.1',
packages = ['myapplication'],
data_files = [
('share/applications', ['data/org.myapplication.desktop']),
],
)
Run Code Online (Sandbox Code Playgroud)
如您所见,我们给出的目录 ( share/applications
) 是相对的。引用 Pythons 的编写设置脚本:
如果 directory 是相对路径,则它相对于安装前缀进行解释(Python 的 sys.prefix 用于纯 Python 包,sys.exec_prefix 用于包含扩展模块的包)。
多亏了这一点,当打包程序设置安装前缀(通常是/usr
或/usr/local
)时,您的桌面文件将安装在正确的位置。
顺便说一句,谈到桌面文件,请务必阅读有关命名约定的部分:
... 应遵循“反向 DNS”约定,例如 org.example.FooViewer.desktop。
顺便说一句,与本页所说的相反,Exec
文件行中不需要绝对路径。看看你系统上安装的文件,几乎没有人这样做。
grep Exec= /usr/share/applications/*.desktop
Run Code Online (Sandbox Code Playgroud)
在我看来,这听起来是一个很好的方法,但也许您可以将文件放在用户应用程序文件夹中,而不是将文件放在.desktop
系统范围的文件夹中。/usr/share/applications/
~/.local/share/applications
这也不需要提升权限来访问根拥有的/user
目录及其子目录。
归档时间: |
|
查看次数: |
1057 次 |
最近记录: |