【问题标题】:How to distribute `.desktop` files and icons for a Python package in Gnome (with distutils or setuptools)?如何在 Gnome(使用 distutils 或 setuptools)中分发 Python 包的“.desktop”文件和图标?
【发布时间】:2010-10-04 20:02:33
【问题描述】:

目前我正在使用自动工具来构建/安装和打包我的项目,但我真的很想转向感觉更“pythonic”的东西。

我的项目包含两个脚本、一个模块、两个 glade GUI 描述和两个 .desktop 文件。它目前是一个纯 python 项目,尽管这可能很快就会改变。

查看 setuptools,我可以轻松了解如何处理除 .desktop 文件之外的所有内容;它们必须最终位于特定目录中,以便 Gnome 可以找到它们。

开始使用 distuils/setuptools 是个好主意吗?

【问题讨论】:

标签: python packaging setuptools gnome distutils2


【解决方案1】:

我创建了https://pypi.python.org/pypi/install-freedesktop。它会自动为 gui_scripts 入口点创建 .desktop 文件,可以通过 setup 参数对其进行自定义,并支持--user 以及系统范围的安装。与 DistUtilsExtra 相比,它的范围更窄,恕我直言,更 Pythonic(显式优于隐式)。

【讨论】:

    【解决方案2】:

    我设法让它发挥作用,但我觉得它更像是一种解决方法

    不知道处理这个问题的首选方法是什么...

    我使用了以下setup.py文件(完整版是here):

    from setuptools import setup
    
    setup(
      # ...
      data_files=[
        ('share/icons/hicolor/scalable/apps', ['data/mypackage.svg']),
        ('share/applications', ['data/mypackage.desktop'])
      ],
      entry_points={
        'console_scripts': ['startit=mypackage.cli:run']
      }
    )
    

    启动脚本槽entry_points 有效。但是 data_files 放在一个 egg 文件中而不是在指定的文件夹中,因此桌面 shell 无法访问它们。

    为了解决这个问题,我使用了以下setup.cfg 文件:

    [install]
    single-version-externally-managed=1
    record=install.txt
    

    这行得通。两个数据文件都在正确的位置创建,.desktop 文件被 Gnome 识别。

    【讨论】:

    • 这是一个好的开始,但不适用于 --user,因为 /usr/bin 必须在 .desktop 文件中为 Exec 进行硬编码。您可以省略路径,但它必须位于桌面环境的 $PATH 中,而 ~/.local/bin 通常不是。另外,请注意 pip 不需要 --single-version-externally-managed,因为它不使用鸡蛋。
    • @Brutus 我知道已经有 9 年了,但 MANIFEST.inadding any non-code file 来说还不够吗?
    【解决方案3】:

    您可以尝试使用python-distutils-extraDistUtilsExtra.auto 模块自动生成supports .desktop 文件,以及Glade/GtkBuilder .ui 文件、Python 模块和脚本、misc 数据文件等。

    它应该适用于 Distutils 和 Setuptools。

    【讨论】:

      【解决方案4】:

      一般来说,是的——在构建 Python 项目时,一切都比自动工具好。

      到目前为止,我在 setuptools 方面有很好的经验。但是,将文件安装到固定位置并不是 setuptools 的强项——毕竟,它不是为 Python 应用程序构建安装程序,而是分发 Python 库。

      对于不是应用程序数据文件(如图像、UI 文件等)但提供与操作系统集成的文件的安装,您最好使用真正的打包格式(如 RPM 或 deb)。

      也就是说,没有什么能阻止您使用基于 setuptools 的构建过程和一个用于将所有内容安装到正确位置的小型 make 文件。

      【讨论】:

      • 那么,您是说没有任何 Pythonic 可用于构建/打包用 Python 编写的应用程序吗?这有点令人失望。
      • 打包应用程序取决于操作系统,而不是编程语言。 Windows 上的应用程序包(带有安装程序等)必须满足与 .deb 包或 Mac OS X 应用程序不同的要求。
      • 通过选择一个好的构建环境可以大大简化操作系统的打包。许多构建环境也兼作简单的打包系统,通常只使用源代码,例如auto-tools、distutils、ruby gems……也许“分发系统”是一个更好的术语。
      • 请回到原来的问题!是否有一个用 Python 编写的应用程序的构建环境比自动工具更好(更 Pythonic)? (请记住,我必须将文件安装到固定位置。)
      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 2011-11-23
      • 2011-09-14
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多