【问题标题】:How do I do Debian packaging of a Python package?如何对 Python 包进行 Debian 打包?
【发布时间】:2010-11-25 20:05:10
【问题描述】:

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

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

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

我在谷歌搜索时发现的大多数建议只是不使用python-supportpython-central 的讨厌黑客的例子。

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

这里有没有人以合理的非 hacky 方式从 Python 包制作 Debian 包?

我开始认为,从不了解 Debian 打包和 python-support 到获得工作脚本需要一个多星期的时间。别人花了多长时间?

【问题讨论】:

    标签: python debian


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

       apt-cache rdepends python-support
      

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

      apt-get source <package>
      

      要构建它,请执行

      cd <packagesrc>
      dpkg-buildpackage -rfakeroot
      

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

      一旦开始,您应该需要一天的时间才能完成。

      【讨论】:

      • 注意:由于编写了此答案,python-support 已被弃用,取而代之的是 dh_python2Transition to dh_python2 在 Debian wiki 上有简要描述。
      • @drdaeman @Martin: dh_python2 现在直接在python 包中发货,所以这个配方不再那么好用了。你会如何更新它?
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 链接现在重定向到 "Python/LibraryStyleGuide" 并且链接可能(有效地)损坏了。或者,哪个部分是相关的?你能解决它吗?
        【解决方案5】:

        构建 .deb 包的正确方法是使用dpkg-buildpackage,但有时会有点复杂。相反,您可以使用dpkg -b &lt;folder&gt;,它会创建您的 Debian 软件包。

        这些是使用 dpkg -b &lt;folder&gt; 使用任何二进制文件或任何类型的脚本创建 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/all your files下,/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 包将被创建! (您还可以添加 post/pre install 脚本和您想要的所有内容。它的工作方式与普通的 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软件包的完整文章可以阅读here

        【讨论】:

        • 感谢您的指导。如何添加 pre/post inst 脚本?
        • @Gleb 前/后脚本必须放在DEBIAN 文件夹中。只需使用正确的名称preinstpostinstprermetc.. 添加您的脚本。我很高兴它帮助了你:)
        • 原来,提到的(完整)文章已经消失了..(
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-22
        • 2013-06-05
        • 1970-01-01
        • 2016-11-28
        相关资源
        最近更新 更多