如何对Python包进行Debian打包?

时间:2009-09-05 05:39:24

标签: python debian

我需要编写或找到一个脚本来使用Python包中的python-support创建Debian包。 Python包将是纯Python,没有C扩展。

用于测试目的的Python包只是一个带有空__init__.py文件和单个Python模块package_test.py的目录。

打包脚本必须使用python-support为目标平台上可能的多个Python安装提供正确的字节码,即Ubuntu Jaunty上的v2.5和v2.6。

我在google搜索时发现的大多数建议只是讨厌的黑客的例子,甚至没有使用python-support或python-central。

我花了几个小时研究这个,我能想到的最好的是从现有的开源项目中破解脚本,但我不知道我正在做什么需要哪些。

有没有人以合理的非hacky方式从Python包中创建Debian软件包?

我开始认为从不知道Debian打包和python支持到获取工作脚本需要一个多星期的时间。它花了多长时间?

5 个答案:

答案 0 :(得分:20)

我会获取现有Debian软件包的来源,并将其中的实际软件包替换为您的软件包。要查找依赖于python-support的包列表,请执行

 apt-cache rdepends python-support

选择一个Architecture: all的包,这样它就是一个纯Python包。通过这个列表,我发现,例如python-flup可能是一个很好的起点。 要获得一个这样的包的来源,请执行

apt-get source <package>

要构建它,请执行

cd <packagesrc>
dpkg-buildpackage -rfakeroot

编辑时,您只需要debian文件夹中的文件;用您自己的包名替换所有对flup的引用。

一旦开始,你需要一天时间才能完成。

答案 1 :(得分:20)

我认为你想要的是http://pypi.python.org/pypi/stdeb

  

stdeb生成Debian源包   从Python包中通过一个新的   distutils命令,sdist_dsc。   提供自动默认值   Debian包,但很多方面   得到的包可以   定制(见定制   部分,见下文)。额外的   命令bdist_deb创建一个Debian   二进制包,一个.deb文件。

答案 2 :(得分:20)

构建deb包的正确方法是使用dpkg-buildpackage,但有时它有点复杂。相反,您可以使用dpkg -b <folder>,它将创建您的Debian软件包。

这些是使用dpkg -b <folder>创建Debian包的基础知识,包含任何二进制文件或任何类型的脚本,无需手动编译即可自动运行(Python,Bash,Pearl,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/all your files下,并且只在/usr/bin/下放置一个文件{1}}将从/usr/share/ProgramName/

  2. 调用您的脚本
  3. 将所有文件夹权限更改为root:

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

    chmod 0755 /path/to/the/script
    
  5. 最后,您可以运行:dpkg -b /path/to/the/ProgramName-Version并创建您的deb包! (你也可以添加post / pre inst脚本和你想要的一切,就像普通的Debian软件包一样)

  6. 以下是control文件的示例。您只需将其复制粘贴到名为“control”的空文件中,并将其放在DEBIAN文件夹中

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

    关于Debian软件包的完整文章可以阅读here

答案 3 :(得分:16)

这里发布的大多数答案都已过时,幸运的是最近发布了一篇很棒的Debian wiki帖子,它解释了当前的最佳实践,并描述了如何为Python模块和应用程序构建Debian软件包。

答案 4 :(得分:5)

首先,Debian中已经有很多Python软件包;您可以使用apt-get source或访问http://packages.debian.org下载任何来源(包括所有包装)。

您可以找到以下使用资源: