是否有创建用于分发Python程序的Debian软件包的标准方法?


77

有关如何执行此操作的信息很多,但是由于“有多种方法可以给猫换皮”,因此涵盖该过程的所有教程/手册似乎都做出了与其他假设不同的某些假设。教程,我仍然没有设法掌握它。

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

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

现在我的问题是:

  1. 我对流程的理解正确吗?有什么我想念的东西,或者我弄错了吗?
  2. 步骤5确实让我更困惑:特别是对我来说最模糊的两点是:
    • 如何编写setup.py安装独立程序的脚本? 编辑:通过独立的程序,我指的是节目旨在通过桌面用户使用(而不是一个模块,这是我理解的一样功能的集合被其他软件已经被导入后使用)。在我的特定情况下,我实际上需要两个这样的“程序”:主软件和单独的实用程序(实际上,另一个“程序”应与另一个程序放在同一程序包中)。
    • 这种脚本对DEB包有什么特殊性?官方文档似乎只涉及RPM和Windows内容。

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


1
在为二进制打包准备python程序之前,您需要为常规发行做好准备。那是setup.py位。这与autotools许多GNU C / C ++项目使用的步骤相当,但特定于python。这比听起来容易,请阅读docs.python.org/distutils/index.html
SingleNegationElimination 2011年

1
@TokenMacGuy-谢谢,我已经有了一个大概的主意(我的措词可能不正确,但这就是我描述的过程的第5部分)。让我感到困惑的是,在官方文档中,我找不到关于如何分发独立程序而不是模块的明确方法。也许这只是一个术语问题,我所谓的“独立程序”是一种特定类型的模块?
mac

1
@mac:您可以安装脚本(即可执行文件)来启动程序。参见docs.python.org/distutils/setupscript.html#installing-scripts
Thomas K

@Thomas-我之前读过这篇文章,但我仍然感到困惑:我的程序有一个main.py文件(我想您可能将其称为“脚本”)和一系列模块以及其他一些YAML和SVG文件...我仍然努力找到有关如何实现此目标的清晰文档。到目前为止,我能找到的最好的东西是我仍在学习的distutils教程...
mac

通过独立程序,您是说没有将python作为依赖项吗?Debian和Ubuntu的最新发行版都至少带有python 2.6,因此,如果您的代码兼容2.6,那么“独立程序”实际上可能只是您所建议的模块的特例。
野鸭

Answers:


28

看起来stdeb会做您想要的。

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


1
非常非常非常有用,谢谢!(+1)我将在未来几天测试这条路,并进行报告。
mac

1
那确实是要走的路(至少对我来说)。再次感谢您,回答被接受。
mac

3
“发行版的console_scripts”链接无效。
Czarek Tomczak 2013年

@CzarekTomczak,也许这会有所帮助
oblalex 2014年

我有一个手写的DEBIAN/control。有没有办法stdeb利用它?
圣安东尼奥

10

巴里·华沙(Barry Warsaw)的这篇文章帮助我进一步了解了整个过程。不过,我仍然需要在侧面进行大量搜索,并且过去一段时间我阅读了大多数Ubuntu打包指南

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


2
请注意,《 Hitchhiker指南》已被《Python打包用户指南》所取代。
tshepang

哦谢谢!尽管它们都只覆盖了distutils的最基本的知识。Distribute文档有更多详细信息,是推荐的解决方案(在撰写本文时)。
metakermit

1
Barry的博客已更新,并推荐wiki.debian.org/Python/LibraryStyleGuide指南。它为我工作。
卢卡斯

适用于python的Ubuntu打包指南不再起作用。
Archisman Panigrahi

8

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

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

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

2
在尝试使用stdeb构建需要pyqt5的python3包遇到障碍时,此解决方案正是我需要的。Mucho感谢Rafael。我也很抱歉不小心单击此解决方案上的向下投票按钮-我似乎无法更改我的投票。
柯蒂斯·吉达克

我只是尝试再次单击向下投票(也单击向上投票),然后收到以下消息: 您最后一次投票是在11月17日21:25对该答案进行的。除非编辑答案,否则您的视频现已锁定。 也许如果您编辑了答案,我可以更改我的投票吗?再次感谢@rsm的回答。它帮助我为manuskript创建了一个DEB包。
Curtis Gedak

4

那里有几个库可以抽象出所有必要的步骤,并允许您通过一个命令将Python软件包转换为Debian软件包。

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

  • stdeb(已在此答案中提及,使用安装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 . .
    

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.