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

2024-10-05 12:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

有很多关于如何做到这一点的信息,但是由于有不止一种方法可以剥猫皮,而且所有涉及这一过程的教程/手册似乎都做出了与其他教程不同的某些假设,所以我仍然没有掌握。

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

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

现在我的问题是:

  1. 我对流程的理解是否正确?有什么我遗漏的,或者我做错了什么吗?
  2. 第五步对我来说真的更让人困惑:特别是对我来说最模糊的两点是:
    • 如何编写安装独立程序的setup.py脚本?编辑:通过独立程序我指的是桌面用户打算使用的程序(与模块相反,我理解它就像是其他软件在导入后使用的功能集合)。在我的具体案例中,我实际上需要两个这样的“程序”:主软件和一个单独的实用程序(实际上,第二个“程序”应该与另一个在同一个包中)。
    • 这种用于DEB包的脚本有什么特殊性?官方文档似乎只涉及RPM和Windows的内容。。。

顺便说一句:这些是目前为止我能找到的最好的信息来源。如果你还有比这更好的,请分享!:)


Tags: 文件方法py程序脚本信息package过程
3条回答

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

以下是使用dpkg -b <folder>创建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. 将所有文件夹权限更改为根目录:

    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://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.

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

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

This article by Barry Warsaw帮助我在这个过程中走得很远。尽管如此,我还是要在旁边做大量的搜索,而且在过去的一段时间里,我阅读了大部分Ubuntu packaging guide

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

相关问题 更多 >

    热门问题