92

有大量关于如何做到这一点的信息,但由于“给猫剥皮的方法不止一种”,而且涵盖该过程的所有教程/手册似乎都做出了与其他不同的某些假设教程,我仍然没有设法掌握它。

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

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

现在我的问题:

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

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

4

5 回答 5

34

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

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

于 2011-08-18T18:22:50.890 回答
11

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

可以在此处阅读有关 Debian 软件包的完整文章。

于 2014-09-27T17:14:48.050 回答
10

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

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

于 2013-07-15T22:30:50.260 回答
6

有几个库可以抽象出所有必要的步骤,让您使用单个命令将 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 . .
    

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

于 2018-01-16T15:57:56.780 回答
0

这种方法对我有用。

  1. 安装标准数据库。(点安装标准数据库)

  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 目录中
于 2019-12-07T12:36:36.123 回答