创build用于分发Python程序的debian软件包的标准方法?

关于如何做到这一点,有大量的信息,但是由于“有一种以上的方式来剥皮猫” ,所有涉及这个过程的教程/手册似乎都做出了某些与其他的不同的假设教程,我还没有设法掌握它。

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

  1. 我的最终目标应该是创build一个“二进制”.deb包。 这样的软件包将是平台独立(32/64位),因为所有的Python程序都是这样的。
  2. 要创build一个“二进制”包,我需要首先创build一个源包。
  3. 要创build源包,我可以使用CDBSdebhelper 。 Debhelper是初学者推荐的方法。
  4. 创build一个源代码包的核心是在源代码目录中填充DEBIAN目录,其中包含许多文件,说明需要复制文件的位置,受版权和授权scheme的约束,它们依赖于什么等等。
  5. 如果 python源代码还带有一个distutils的setup.py脚本,第四步可以在很大程度上自动执行dh_make命令。

现在我的问题:

  1. 我的理解过程是否正确? 有什么我失踪,或者我错了什么?
  2. 步骤#5对我来说真的更令人困惑:具体来说,对我来说最难掩的两点是:
    • 如何编写安装独立程序的setup.py脚本? 编辑:通过独立程序我的意思是一个程序,旨在由桌面用户(而不是一个模块 ,我明白像一个function的集合,被其他软件导入后使用)使用的程序。 在我的具体情况下,我实际上需要两个这样的“程序”:主要软件和一个单独的工具(实际上是第二个“程序”应该与另一个相同的程序包)。
    • 这个DEB包的脚本有什么特殊之处? 官方文档似乎只处理RPM和Windows的东西…

顺便说一句:这是迄今为止我能find的最好的信息来源。 如果你有比这更好的东西,请分享! 🙂

  • Ubuntu的Python包装指南
  • 从python setup.py创build一个.deb包 (它显示的步骤,但没有解释 ,足够让我跟随)
  • ShowMeDo关于“用python编写一个.deb软件包”的video (它看起来不是最新的,如果我没有错误的话)会生成一些供个人使用的软件包,没有依赖关系,没有签名的变更日志和其他关键数据将使其与Debian政策不相容)。

它看起来像stdeb会做你想要的。

此外,对于安装脚本,我强烈build议分发的console_scripts入口点支持。

巴里华沙的这篇文章帮助我完成了这个过程。 尽pipe如此,我仍然需要进行大量的search工作,而且我过去曾经阅读过大部分Ubuntu的包装指南 。

有一个良好的setup.py是一个非常好的build议。 我发现这两个指南相当不错:

  • 搭便车指南
  • 分发文档

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

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

  1. 创build文件和文件夹为了重新创build以下结构:
  ProgramName-Version/ ProgramName-Version/DEBIAN ProgramName-Version/DEBIAN/control ProgramName-Version/usr/ ProgramName-Version/usr/bin/ ProgramName-Version/usr/bin/your_script 

放置在/usr/bin/的脚本直接从terminal调用,请注意我没有为脚本添加扩展。 另外你可以注意到deb程序包的结构将会是程序安装后的结构。 所以如果你的程序有一个单独的文件,你可以直接把它放在ProgramName-Version/usr/bin/your_script ,但是如果你有多个文件,你应该把它们放在ProgramName-Version/usr/share/ProgramName/all your files并且只在/usr/bin/下面放置一个文件,它将从/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包将被创build! (你也可以添加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.