代码之家  ›  专栏  ›  技术社区  ›  fadedbee

如何对python包进行debian打包?

  •  42
  • fadedbee  · 技术社区  · 15 年前

    我需要编写或找到一个脚本,使用Python支持从Python包创建Debian包。python包将是纯python,没有C扩展。

    用于测试的python包将只是一个目录,其中 __init__.py 文件和单个python模块, package_test.py .

    包装脚本 必须 使用python支持为目标平台(即UbuntuJaunty上的v2.5和v2.6)上可能安装的多个python提供正确的字节码。

    我在谷歌上找到的大多数建议都是一些甚至不使用Python支持或Python Central的恶意黑客的例子。

    我花了好几个小时研究这个问题,我能想到的最好办法就是从现有的开源项目中破解脚本,但我不知道我所做的工作需要哪些部分。

    这里有没有人以一种合理的非黑客方式从python包中生成了debian包?

    我开始认为,从对Debian打包和Python支持一无所知到获得一个有效的脚本,我需要一个多星期的时间。别人花了多长时间?

    5 回复  |  直到 6 年前
        1
  •  19
  •   Martin v. Löwis    15 年前

    我将获取现有Debian包的源代码,并将其中的实际包替换为您的包。要查找依赖于Python支持的包列表,请执行以下操作:

     apt-cache rdepends python-support
    

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

    apt-get source <package>
    

    建造它,做

    cd <packagesrc>
    dpkg-buildpackage -rfakeroot
    

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

    一旦你开始了,就需要一天的时间来完成。

        2
  •  20
  •   Nikratio    14 年前

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

    stdeb生成debian源包 通过新的 distutils命令,sdist_dsc。 为提供自动默认值 Debian包,但有很多方面 结果包的 自定义(参见自定义 第节,如下)。额外的 命令bdist_deb创建一个debian 二进制包,一个.deb文件。

        3
  •  19
  •   Rafael Senties Martinelli    6 年前

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

    这些是创建Debian包的基础 DPKG-文件夹 使用任何二进制文件或不需要手动编译而自动运行的任何类型的脚本(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 只在下面放一个文件 /UR/BIN/ 调用脚本的位置 /usr/share/ProgramName/

    2. 将所有文件夹权限更改为根目录:

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

      chmod 0755 /path/to/the/script
      
    4. 最后,您可以运行: dpkg -b /path/to/the/ProgramName-Version 您的DEB包将被创建!(您还可以添加post/pre-inst脚本以及您想要的所有内容,它就像一个普通的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://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 .

        4
  •  15
  •   jpoppe    11 年前

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

        5
  •  5
  •   derobert    15 年前

    首先,Debian中已经有大量的python包;您可以使用以下方法下载其中任何一个包的源代码(包括所有包) apt-get source 或参观 http://packages.debian.org .

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