有没有一种标准的方法来创建Debian软件包来分发Python程序?

时间:2011-08-18 16:10:37

标签: python debian packaging distutils debhelper

有很多关于如何做到这一点的信息,但是因为“有一种方法可以给猫皮肤”,所有的教程/手册都涵盖了一些过程似乎做出了与其他教程不同的某些假设,我仍然无法掌握它。

到目前为止,这是我认为的理解。

  1. 我的最终目标应该是创建一个“二进制”.deb包。这样的包将与平台无关(32/64位),因为所有Python程序都是这样的。
  2. 要创建“二进制”包,我首先需要创建一个源包。
  3. 要创建源包,我可以使用CDBSdebhelper。 Debhelper是初学者的推荐方式。
  4. 创建源包的核心是填充源目录中的DEBIAN目录,其中包含许多文件,说明文件需要复制的位置,受其限制的版权和许可方案,以及它们具有哪些依赖关系等等...
  5. 步骤#4可以在很大程度上自动化dh_make命令,如果 Python源代码也带有distutils'setup.py脚本。
  6. 现在我的问题:

    1. 我对这个过程的理解是否正确?我有什么遗漏,或者我出错了什么?
    2. 第五步对我来说真的更让人困惑:特别是对我来说最难以理解的两点是:
      • 如何撰写安装独立程序的setup.py脚本? 编辑 独立程序我是说一个旨在由桌面用户使用的程序(而不是模块,我理解这是一个导入后由其他软件使用的功能集合)。在我的具体情况下,我实际上需要两个这样的“程序”:主要软件和一个单独的实用程序(实际上是第二个“程序”,应该与另一个程序包在同一个程序包中)。 / LI>
      • DEB软件包这样的脚本有哪些特点?官方文档似乎只涉及RPM和Windows的内容......
    3. 顺便说一下:这些是迄今为止我能找到的最好的信息来源。如果你有什么比这更好的,请分享! :)

5 个答案:

答案 0 :(得分:23)

看起来stdeb会做你想做的事。

另外,对于安装脚本,我强烈建议distribute's console_scripts入口点支持。

答案 1 :(得分:9)

This article by Barry Warsaw帮助我完成了整个过程。不过,我仍然需要进行大量搜索,而且我在过去的某个时间阅读了大部分Ubuntu packaging guide

拥有一个好setup.py是一个非常好的建议。我发现这两个指南非常好:

答案 2 :(得分:5)

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

这些是使用dpkg -b <folder>创建Debian包的基础知识,包含任何二进制文件或任何类型的脚本,无需手动编译即可自动运行(Python,Bash,Pearl,Ruby):

  1. 创建文件和文件夹以重新创建以下结构:
  2.     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/

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

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

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


    4. 以下是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.
      

答案 3 :(得分:3)

有几个库可以抽象出所有必要的步骤,让你用一个命令将你的python包转换成debian包。

假设您的python包已经有setup.py,在setup.py所在的目录中,您可以使用:

  • stdeb(已在此answer中提及,请安装pip install stdeb)。要创建debian包,请运行:

    python setup.py --command-packages=stdeb.command bdist_deb
    

    输出.deb文件将位于bdist_deb目录。

  • fpm(与gem install --no-ri --no-rdoc fpm一起安装)。要创建debian包,请运行:

    fpm -s python -t deb setup.py
    
  • py2deb(与pip install py2deb一起安装)。要创建debian包,请运行:

    py2deb -r . .
    

这些库中的每一个都有自己的注意事项,因此您可能希望尝试最适合您的库。

答案 4 :(得分:0)

此方法对我有用。

  1. 安装stdeb。 (pip install stdeb)

  2. 创建setup.py。我正在使用PyCharm。这将(https://www.jetbrains.com/help/pycharm/creating-and-running-setup-py.html) 在您的项目目录中编写这些命令。

  3. sudo apt-get install python3-stdeb fakeroot python-all
  4. python3 setup.py sdist
  5. sudo python3 setup.py --command-packages = stdeb.command bdist_deb
  6. 您的deb文件位于项目中的deb_dist目录中