我有一个 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
- 在你的主目录创建一个任意名称的文件夹,例如:mypyscript
- 打开文件夹并创建两个名为“DEBIAN”和“usr”的文件夹
- 打开文件夹 DEBIAN。在其中创建一个名为“control”的文本文件(无扩展名)。
打开“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
返回名为 mypyscript 的文件夹。打开“usr”。创建一个名为“bin”的文件夹。打开“bin”并将您的 pythonscript 文件粘贴到那里。
- 您还可以创建菜单条目。但这不是必需的。
- 返回文件夹“mypyscript”所在的主文件夹或关闭文件浏览器。
- 打开终端。确保终端位于主文件夹中。输入
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,所以无论如何我都将它们包含在这里。您可以使用这些命令安装它们devscripts
。build-essential
lintian
pandoc
sudo apt-get update
sudo apt-get install git devscripts build-essential lintian pandoc
在hello-world-1.0.0
文件夹内,创建一个名为 的文件夹debian
。在其中创建一个名为 的文件夹source
。同样直接在debian
文件夹内,创建以下文件changelog
、compat
、control
、copyright
、install
和rules
。在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/