如何对Python包进行Debian打包?
我需要写一个脚本,或者找一个脚本,用来从一个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-support
或python-central
。
我花了几个小时在研究这个问题,最好的办法就是从一个现有的开源项目中修改脚本,但我不知道哪些部分是我需要的。
这里有没有人用比较正常的方式把Python包做成Debian包的?
我开始觉得,从对Debian打包和python-support
一无所知,到搞出一个能用的脚本,可能要花我超过一周的时间。其他人花了多长时间呢?
5 个回答
我觉得你想要的是 http://pypi.python.org/pypi/stdeb:
stdeb 是一个工具,它可以把 Python 包转换成 Debian 源代码包。这个过程是通过一个新的命令来完成的,叫做 sdist_dsc。它会自动为 Debian 包提供一些默认设置,但你也可以根据需要自定义很多方面(具体可以看下面的自定义部分)。另外,还有一个命令叫 bdist_deb,可以用来创建 Debian 的二进制包,也就是 .deb 文件。
制作一个 .deb 包的正确方法是使用 dpkg-buildpackage
,但有时候这个过程会有点复杂。你可以选择使用 dpkg -b <folder>
,这样就能创建你的 Debian 包了。
下面是使用 dpkg -b <folder>
创建 Debian 包的基本步骤,适用于任何二进制文件或自动运行的脚本(比如 Python、Bash、Perl 和 Ruby):
首先,创建文件和文件夹,按照以下结构来搭建:
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/
下的脚本。把所有文件夹的权限改成 root:
chown root:root -R /path/to/ProgramName-Version
修改脚本的权限:
chmod 0755 /path/to/the/script
最后,你可以运行:
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 包的完整文章可以在 这里 阅读。
我会拿一个现有的Debian软件包的源代码,然后把里面的实际软件包替换成你自己的软件包。想要找到依赖于python-support的软件包列表,可以执行
apt-cache rdepends python-support
选择一个标记为Architecture: all
的软件包,这样它就是一个纯Python的软件包。在这个列表中,我发现比如说python-flup可能是个不错的起点。要获取这样的一个软件包的源代码,可以执行
apt-get source <package>
要构建它,可以执行
cd <packagesrc>
dpkg-buildpackage -rfakeroot
在编辑的时候,预计你只需要debian
文件夹里的文件;把所有提到flup的地方替换成你自己的软件包名称。
一旦开始了,应该花你一天的时间就能完成。