如何为 python3 脚本创建 deb 包?

如何为 python3 脚本创建 deb 包?

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

python3 main.py

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

我尝试创建一个具有 python3 依赖项的 deb,然后运行python3 packagename,但是得到:

/usr/bin/python3: can't find '__main__' module in 'packagename'

尝试使用 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

答案1

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

简而言之:

  1. 创建包源目录

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

    cp ~/myscript myscript-0.1
    cd myscript-0.1

    示例脚本:

    #!/usr/bin/python3
    
    if __name__ == '__main__':
        print("Hello world")
  3. 创建包装骨架 (debian/*)

    dh_make -s --indep --createorig
  4. 删除示例文件

    rm debian/*.ex debian/*.EX debian/README.*
  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
    
  6. debian/install 必须包含要安装的脚本以及目标目录

    echo myscript usr/bin > debian/install
  7. 编辑 debian/rules

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

    #!/usr/bin/make -f
    
    %:
        dh $@ --with=python3

    笔记:前面是一个 TAB dh $@,而不是四个空格!

  8. 构建包

    debuild -us -uc

您将收到一些 Lintian 警告/错误,但您的软件包已可以使用:

../myscript_0.1-1_all.deb

答案2

对于您遇到的错误除气

sudo apt-get install python-wxgtk2.8

来源:上述解决方案的来源

相关内容