如何为单个 python 脚本创建 deb 包?

如何为单个 python 脚本创建 deb 包?

我有一个 Python 脚本,我想将其作为 deb 包分发。它是指标在 Unity 面板中显示本地日期。我确实遵循了从脚本或二进制文件创建 .deb 包但是我无法创建 deb 包,因为它失败了。

有人能给我一步一步的指导吗?据我所知,这个脚本依赖于python-appindicator

笔记:
我不想要任何 Debian/Ubuntu 打包说明的链接。我已经看过大部分了。我觉得它们对初学者不太友好。

答案1

以下是 Python 脚本源包的基本示例。虽然大多数打包教程都有点复杂,但如果您遇到问题,它们确实可以提供帮助。话虽如此,我首先通过简单地查看 Debian 软件包来学习 Debian 打包的基础知识。apt-get source类似的东西并通过示例学习。

这是您的基本源包布局:

my-script/
    -- myScript
    -- debian/
        -- changelog
        -- copyright
        -- compat
        -- rules
        -- control
        -- install

dch --create在目录中运行以创建正确格式的debian/changelog条目。

debian/版权看起来应该是这样的:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: myScript
Upstream-Contact: Name, <email@address>

Files: *
Copyright: 2011, Name, <email@address>
License: (GPL-2+ | LGPL-2 | GPL-3 | whatever)
 Full text of licence.
 .
 Unless there is a it can be found in /usr/share/common-licenses

debian/兼容可以是:7

debian/规则

#!/usr/bin/make -f

%:
    dh $@ --with python2

注意前面必须有“tab” dh $@ --with python2,而不是空格。

注意:Python2 已弃用。对于单个 Python 文件,只需dh $@(不带--with python) 即可。

debian/控制

Source: my-script
Section: python
Priority: optional
Maintainer: Name, <email@address>
Build-Depends: debhelper (>= 7),
               python (>= 2.6.6-3~)
Standards-Version: 3.9.2
X-Python-Version: >= 2.6


Package: my-script
Architecture: all
Section: python
Depends: python-appindicator, ${misc:Depends}, ${python:Depends}
Description: short description
 A long description goes here.
 .
 It can contain multiple paragraphs

debian/安装

myScript usr/bin/

该文件指示哪个文件将安装到哪个文件夹中。

现在用debuild --no-tgz-check

这将创建一个可运行的 deb 包。Lintian 会发出一些有关缺少 orig.tar.gz 的警告,但除非您打算创建一个适当的上游项目来发布 tarball 版本,否则您可能只想暂时忽略它。

答案2

  1. 在你的主目录创建一个任意名称的文件夹,例如:mypyscript
  2. 打开文件夹并创建两个名为“DEBIAN”和“usr”的文件夹
  3. 打开文件夹 DEBIAN。在其中创建一个名为“control”的文本文件(无扩展名)。
  4. 打开“control”并输入以下内容并将其保存在 DEBIAN 上

    Package: mypyscript
    Version: 0.01
    Architecture: all
    Maintainer: your name<your mail id>
    Installed-Size: 2
    Depends: python-appindicator
    Section: extras
    Priority: optional
    Homepage: your homepage
    Description: describe
    
  5. 返回名为 mypyscript 的文件夹。打开“usr”。创建一个名为“bin”的文件夹。打开“bin”并将您的 pythonscript 文件粘贴到那里。

  6. 您还可以创建菜单条目。但这不是必需的。
  7. 返回文件夹“mypyscript”所在的主文件夹或关闭文件浏览器。
  8. 打开终端。确保终端位于主文件夹中。输入dpkg -b mypyscript。然后按回车键。几秒钟后,您的 deb 包就准备好了

笔记:请正确填写“控制”文件。不要使用撇号。它仅用于指示名称。

答案3

.deb使用单个 Python 3 脚本创建包(2021 年更新)

与其他答案相比,这个答案似乎很长(而且确实很长),但是,与接受的答案不同,它适用于 Python 3,并且在 2021 年有效。此外,它不会产生大量警告,因为它包含了所有要求,就像一个man页面一样。

以下是如何使用单个 Python 3 脚本创建 Debian 软件包(是的,它可以在 Ubuntu 上运行)。首先,让我们编写脚本。这将是一个简单的 hello-world 程序。将此文件命名为hello-world。将其放在名为的文件夹中hello-world-1.0.0。将hello-world-1.0.0文件夹放在名为的第二个文件夹中work。不过,这里的目录结构有点……奇怪。debuild(我们用来构建包的工具)将.deb文件放置在我们构建它的目录的上一级目录中,因此目录结构将如下所示:

从现在开始,除非另有说明,我将假定您在work/hello-world-1.0.0目录中。

work/
├─ hello-world-1.0.0/
│  ├─ hello-world

请注意,我在文件名中使用了连字符,而不是下划线,因为 Debian 不希望在软件包名称中使用下划线。我还省略了文件扩展名,这没问题,因为我在脚本顶部添加了一个 shebang。

下面是我将用作示例的 Python 脚本。如上所述,它已命名hello-world(不带文件扩展名)。

#!/usr/bin/env python3
def hello_world():
    print("Hello world!")

if __name__ == "__main__":
    hello_world()

这个 Stack Overflow 问题是什么if __name__ = "__main__:"意思。shebang 包括如下内容这个问题

首先,通过运行代码来确保它有效:

$ chmod +x ./hello-world
$ ./hello-world
Hello world!

要构建文件.deb,您需要安装git、、、和软件包。我知道其中一些软件包是预安装的,但我也希望本指南适用于 Debian,所以无论如何我都将它们包含在这里。您可以使用这些命令安装它们devscriptsbuild-essentiallintianpandoc

sudo apt-get update
sudo apt-get install git devscripts build-essential lintian pandoc

hello-world-1.0.0文件夹内,创建一个名为 的文件夹debian。在其中创建一个名为 的文件夹source。同样直接在debian文件夹内,创建以下文件changelogcompatcontrolcopyrightinstallrules。在debian/source文件夹内,创建一个名为 的文件format

你的目录树现在应该看起来像这样

work/
├─ hello-world-1.0.0/
│  ├─ debian/
│  │  ├─ source/
│  │  │  ├─ format
│  │  ├─ changelog
│  │  ├─ compat
│  │  ├─ control
│  │  ├─ copyright
│  │  ├─ install
│  │  ├─ rules
│  ├─ hello-world

现在,来看看这些文件的内容。我假设你直接在hello-world-1.0.0文件夹中。

debian/source/format

你可以忽略这一点,但如果你想知道,§5.22在 Debian 文档中。

3.0 (native)

debian/changelog

该文件包含该程序的更改日志hello-world

hello-world (1.0.0) unstable; urgency=medium

    * Initial release:
 -- John Doe <[email protected]>  Sun, 28 Nov 2021 10:18:51 -0800

debian/compat

这将设置debhelper兼容级别。请参阅§5.2在 Debian 文档中

10

debian/control

apt这将设置工具用来管理包的各种值。请参阅§4.1在 Debian 文档中

Source: hello-world
Section: python
Maintainer: John Doe <[email protected]>
Build-Depends: debhelper (>= 7),
               python3 (>= 3.5)
Standards-Version: 4.5.1
Priority: optional

Package: hello-world
Architecture: all
Section: python
Depends: python3 (>=3.5), ${misc:Depends}
Description: A simple hello-world program to demenstrate how to package a
 Python 3 script as a deb file

debian/copyright

此文件包含有关源代码的版权和许可证的信息。在这里,我假设代码将遵循 MIT 许可证。请根据需要更改此信息。请参阅§4.2在 Debian 文档中

Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/

Files: *
Copyright: 2021 John Doe <[email protected]>
License: MIT-License

Files: debian/*
Copyright: 2021 John Doe <[email protected]>
License: MIT-License

License: MIT-License
 MIT License
 .
 Copyright (c) 2021 John Doe
 .
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.

debian/install

此文件控制哪些文件将安装在您的软件包的何处。请参阅§5.11在 Debian 文档中

hello-world usr/bin/
hello-world.1 usr/share/man/man1/

debian/rules

Debian 构建软件包的方法如下。请参见§4.4在 Debian 文档中。请注意:像其他 Makefile 一样,使用制表符缩进。空格不起作用。

#!/usr/bin/make -f

%:
    dh $@

我们的精美hello-world软件包应该有一个man页面。但是手册页的格式很复杂,难以阅读。因此,我们将用 Markdown 编写手册页,然后让pandoc我们帮我们转换。

在主目录中(即直接在文件夹内hello-world-1.0.0),创建一个名为的文件hello-world.1.md。将以下内容放入文件中:

% hello-world(1) hello-world 1.0.0
% John Doe
% November 2021

# NAME
hello-world - Prints a file until a null-character is reached

# SYNOPSIS
**hello-world** [*options*]

# DESCRIPTION
**hello-world** prints a file character-by-character until a null character is reached. The null character will not be printed

# OPTIONS

# EXAMPLES
**hello-world**
: Prints the text "Hello world!", followed by a newline, to the screen.

构建此包和包需要几个步骤。因此,让我们编写一个 (Bash) 脚本来代替。创建一个名为 的文件build。使其可执行chmod +x ./build。将以下内容放入文件中:

#!/usr/bin/env bash
pandoc hello-world.1.md -s -t man > hello-world.1
debuild --no-tgz-check -uc -us

这将生成手册页,并将其存储在名为的文件中hello-world.1。然后它将构建包。这-uc -us 意味着我们不会使用 GPG 密钥对其进行签名,因为这很复杂。运行脚本(./build),如果一切顺利,生成的包将出现在父目录中work

答案4

我会快速检查一下,这对于创建快速应用程序和生成 debs 非常有用,可以谷歌搜索,或者你可以在这里找到教程http://developer.ubuntu.com/

相关内容