如何为 python3 脚本创建 deb 包?

mee*_*der 8 packaging command-line deb python3

我有一个 Python 文件 main.py。我希望能够从中制作一个 .deb 包,然后能够通过从终端输入包名来运行 main.py。它是用 Python 3 编写的,所以包名应该运行:

python3 main.py
Run Code Online (Sandbox Code Playgroud)

我知道的唯一依赖项是 python3。

我曾尝试创建一个依赖于 python3 的 deb,然后运行python3 packagename,但我得到:

/usr/bin/python3: can't find '__main__' module in 'packagename'
Run Code Online (Sandbox Code Playgroud)

尝试使用 Debreate 创建包无法打开:

Traceback (most recent call last):
  File "/usr/bin/debreate", line 12, in <module>
    import wx, sys, os, debreate, db, language, shutil
  File "/usr/share/debreate/debreate.py", line 23, in <module>
    import os, sys, wx.lib.dialogs, db, webbrowser, language, shutil, subprocess
  File "/usr/share/debreate/db.py", line 5, in <module>
    import wx, wx.combo, wx.lib.mixins.listctrl as LC, os, sys, language
ImportError: No module named combo
Run Code Online (Sandbox Code Playgroud)

Syl*_*eau 11

为 python3 脚本创建 .deb 非常简单,如果您熟悉 python2 打包,只需要在 debian/rules 和 debian/control 中进行一些更改。

简而言之:

  1. 创建包源目录

    mkdir myscript-0.1
    Run Code Online (Sandbox Code Playgroud)
  2. 将您的 python3 脚本(或下面的示例脚本)复制到源目录

    cp ~/myscript myscript-0.1
    cd myscript-0.1
    Run Code Online (Sandbox Code Playgroud)

    示例脚本:

    #!/usr/bin/python3
    
    if __name__ == '__main__':
        print("Hello world")
    Run Code Online (Sandbox Code Playgroud)
  3. 创建打包框架 (debian/*)

    dh_make -s --indep --createorig
    Run Code Online (Sandbox Code Playgroud)
  4. 删除示例文件

    rm debian/*.ex debian/*.EX debian/README.*
    Run Code Online (Sandbox Code Playgroud)
  5. 编辑 debian/control

    将其内容替换为以下文本:

    Source: myscript
    Section: utils
    Priority: optional
    Maintainer: Name, 
    Build-Depends: debhelper (>= 9), python3
    Standards-Version: 3.9.5
    X-Python3-Version: >= 3.2
    
    Package: myscript
    Architecture: all
    Depends: ${misc:Depends}, ${python3:Depends}
    Description: insert up to 60 chars description
     insert long description, indented with spaces
    
    Run Code Online (Sandbox Code Playgroud)
  6. debian/install 必须包含要安装的脚本以及目标目录

    echo myscript usr/bin > debian/install
    Run Code Online (Sandbox Code Playgroud)
  7. 编辑 debian/规则

    将其内容替换为以下文本:

    #!/usr/bin/make -f
    
    %:
        dh $@ --with=python3
    Run Code Online (Sandbox Code Playgroud)

    注意:前面是TAB dh $@,不是四个空格!

  8. 构建包

    debuild -us -uc
    Run Code Online (Sandbox Code Playgroud)

您将收到一些 Lintian 警告/错误,但您的包已准备好使用:

../myscript_0.1-1_all.deb
Run Code Online (Sandbox Code Playgroud)