如何对Python包进行Debian打包?

52 投票
5 回答
26437 浏览
提问于 2025-04-15 14:05

我需要写一个脚本,或者找一个脚本,用来从一个Python包创建一个Debian包,使用的包是python-support。这个Python包将是纯Python的,不包含C扩展。

为了测试,这个Python包只会是一个目录,里面有一个空的__init__.py文件和一个Python模块package_test.py

这个打包脚本必须使用python-support,以便为目标平台上可能存在的多个Python版本提供正确的字节码,比如在Ubuntu 9.04(Jaunty Jackalope)上同时支持v2.5和v2.6。

我在网上搜索时发现的大多数建议都是一些糟糕的黑科技,根本没有使用python-supportpython-central

我花了几个小时在研究这个问题,最好的办法就是从一个现有的开源项目中修改脚本,但我不知道哪些部分是我需要的。

这里有没有人用比较正常的方式把Python包做成Debian包的?

我开始觉得,从对Debian打包和python-support一无所知,到搞出一个能用的脚本,可能要花我超过一周的时间。其他人花了多长时间呢?

5 个回答

22

我觉得你想要的是 http://pypi.python.org/pypi/stdeb

stdeb 是一个工具,它可以把 Python 包转换成 Debian 源代码包。这个过程是通过一个新的命令来完成的,叫做 sdist_dsc。它会自动为 Debian 包提供一些默认设置,但你也可以根据需要自定义很多方面(具体可以看下面的自定义部分)。另外,还有一个命令叫 bdist_deb,可以用来创建 Debian 的二进制包,也就是 .deb 文件。

35

制作一个 .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 包的完整文章可以在 这里 阅读。

23

我会拿一个现有的Debian软件包的源代码,然后把里面的实际软件包替换成你自己的软件包。想要找到依赖于python-support的软件包列表,可以执行

 apt-cache rdepends python-support

选择一个标记为Architecture: all的软件包,这样它就是一个纯Python的软件包。在这个列表中,我发现比如说python-flup可能是个不错的起点。要获取这样的一个软件包的源代码,可以执行

apt-get source <package>

要构建它,可以执行

cd <packagesrc>
dpkg-buildpackage -rfakeroot

在编辑的时候,预计你只需要debian文件夹里的文件;把所有提到flup的地方替换成你自己的软件包名称。

一旦开始了,应该花你一天的时间就能完成。

撰写回答