为分发Python程序创建debian包的标准方法?

mac*_*mac 71 python debian packaging distutils debhelper

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

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

  1. 我的最终目标应该是创建一个"二进制".deb包.这样的包将是平台独立的(32/64位),因为所有的python程序都是这样的.
  2. 要创建"二进制"包,我首先需要创建一个源包.
  3. 要创建源包,我可以使用CDBSdebhelper.Debhelper是初学者的推荐方式.
  4. 创建源包的核心是在源目录中填充DEBIAN目录,其中包含许多文件,说明文件需要复制的位置,它们受到的版权和许可方案,它们具有哪些依赖关系等等......
  5. 如果 python源还附带了distutils 脚本,那么步骤#4可以在很大程度上自动化DEBIAN命令.dh_make

现在我的问题:

  1. 我对这个过程的理解是否正确?我有什么遗失,或者我错了什么?
  2. 第五步真的让我感到困惑:特别是对我来说最难以理解的两点是:
    • 如何编写setup.py安装独立程序的脚本? 编辑:通过独立程序我的意思是一个程序供桌面用户使用(而不是我理解的模块,就像导入后其他软件使用的功能集合).在我的具体情况下,我实际上需要两个这样的"程序":主软件和一个单独的实用程序(实际上是第二个"程序",应该与另一个程序包在同一个程序包中).
    • DEB包的这种脚本有什么特点?官方文档似乎只涉及RPM和Windows的东西......

顺便说一句:这些是迄今为止我能找到的最好的信息来源.如果你有什么比这更好的,请分享!:)

Ros*_*son 26

看起来stdeb会做你想要的.

另外,对于安装脚本,我强烈建议使用分发的console_scripts入口点支持.

  • "distribute's console_scripts"链接不起作用. (3认同)

met*_*mit 10

Barry Warsaw撰写的这篇文章帮助我完成了这个过程.不过,我仍然需要进行大量的搜索,并且我在过去的某个时间阅读了大部分Ubuntu包装指南.

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

  • 请注意,《 Hitchhiker指南》已由[Python打包用户指南](https://python-packaging-user-guide.readthedocs.org/en/latest)取代。 (2认同)

rsm*_*rsm 6

构建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
Run Code Online (Sandbox Code Playgroud)

放置的脚本/usr/bin/直接从终端调用,请注意我没有在脚本中添加扩展名.另外你可以注意到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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更改脚本的权限:

    chmod 0755 /path/to/the/script
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后,你可以运行: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://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.
Run Code Online (Sandbox Code Playgroud)

  • 在遇到尝试使用[stdeb](https://pypi.python.org/pypi/stdeb)的障碍来构建需要pyqt5的python3软件包后,此解决方案正是我需要的。Mucho感谢Rafael。我也很抱歉不小心单击此解决方案上的向下投票按钮-我似乎无法更改我的投票。 (2认同)
  • @CurtisGedak我很高兴它对您有所帮助:),关于下降表决,如果您可以纠正它的话,那就太好了,所以答案继续到顶部!您只需要再次单击即可将其删除 (2认同)

Jak*_*kul 5

有几个库可以抽象出所有必要的步骤,让您可以使用单个命令将 Python 包转换为 Debian 包。

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

这些库中的每一个都有自己的警告,因此您可能想尝试最适合您的。