有没有标准方法为Python程序创建Debian软件包?

99 投票
5 回答
48427 浏览
提问于 2025-04-16 23:53

网上有很多关于如何做这个的资料,但因为"杀猫的方法不止一种",而且所有的教程和手册在某些步骤上似乎都有不同的假设,所以我还是没能完全理解。

到目前为止,这是我认为我理解的内容。

  1. 我的最终目标是创建一个“二进制”的 .deb 包。这种包是平台无关的(32/64 位),因为所有的 Python 程序都是这样的。
  2. 要创建一个“二进制”包,我首先需要创建一个源包。
  3. 创建源包时,我可以使用 CDBSdebhelper。对于初学者来说,推荐使用 debhelper。
  4. 创建源包的核心是将一些文件放入源目录中的 DEBIAN 目录,这些文件说明了文件需要被复制到哪里、它们受什么版权和许可协议的约束、它们依赖哪些其他软件等等……
  5. 如果 Python 源代码中也包含 distutils 的 setup.py 脚本,步骤 #4 可以通过 dh_make 命令大大简化。

现在我有一些问题:

  1. 我对这个过程的理解正确吗? 有没有我遗漏的地方,或者有什么我理解错了的?
  2. 步骤 #5 对我来说真的比较困惑:特别是让我最不明白的两个点是:
    • 我该如何编写一个 setup.py 脚本来安装一个独立的程序? 编辑:我所说的独立程序是指一个面向桌面用户使用的程序(与我理解的模块不同,模块是供其他软件在导入后使用的一系列功能)。在我的具体情况下,我实际上需要两个这样的“程序”:主软件和一个单独的工具(实际上是另一个“程序”,应该和另一个放在同一个包里)。
    • 这样的脚本在 DEB 包中有什么具体要求? 官方文档似乎只涉及 RPM 和 Windows 的内容……

顺便说一下:这是我目前找到的最好的信息来源。如果你有比这些更好的资料,请分享! :)

5 个回答

10

这篇文章是巴里·华沙写的,帮我在这个过程中走得很远。不过,我还是花了很多时间去查找其他资料,之前我也看过大部分的Ubuntu打包指南

有一个好的setup.py文件真的是个很不错的建议。我觉得这两个指南写得很好:

15

制作deb包的正确方法是使用 dpkg-buildpackage,但有时候这个过程会有点复杂。你可以用 dpkg -b <folder> 来创建你的Debian包,这样会简单一些。

下面是使用 dpkg -b <folder> 创建Debian包的基本步骤,适用于任何二进制文件或可以自动运行的脚本(比如Python、Bash、Perl和Ruby):

  1. 首先,创建文件和文件夹,按照下面的结构来组织:

     ProgramName-Version/
     ProgramName-Version/DEBIAN
     ProgramName-Version/DEBIAN/control
     ProgramName-Version/usr/
     ProgramName-Version/usr/bin/
     ProgramName-Version/usr/bin/your_script
    

    放在 /usr/bin/ 下的脚本可以直接从终端调用,注意我没有给脚本加扩展名。你还会发现,deb包的结构就是程序安装后的结构。所以,如果你的程序只有一个文件,可以直接放在 ProgramName-Version/usr/bin/your_script 下;如果有多个文件,就应该把它们放在 ProgramName-Version/usr/share/ProgramName/ 下,并在 /usr/bin/ 下放一个文件,用来调用 /usr/share/ProgramName/ 下的脚本。

  2. 把所有文件夹的权限改成root:

     chown root:root -R /path/to/ProgramName-Version
    
  3. 修改脚本的权限:

     chmod 0755 /path/to/the/script
    
  4. 最后,你可以运行: dpkg -b /path/to/the/ProgramName-Version,这样你的deb包就会被创建出来!(你也可以添加安装前后的脚本,和普通的Debian包一样工作)


这里有一个 control 文件的例子。你只需要把它复制粘贴到一个名为“control”的空文件中,并放到DEBIAN文件夹里。

Package: ProgramName
Version: VERSION
Architecture: all
Maintainer: YOUR NAME <EMAIL>
Depends: python2.7, etc , etc,
Installed-Size: in_kb
Homepage: http://example.com
Description: Here you can put a one line description. This is the short Description.
 Here you put the long description, indented by one space.

关于Debian包的完整文章可以在 这里 阅读。

39

看起来 stdeb 可以满足你的需求。

另外,对于安装脚本,我强烈推荐使用 distribute 的 console_scripts 入口点支持。

撰写回答