Ich habe ein einzelnes Python-Skript, das ich als Deb-Paket verteilen möchte. Es ist einIndikatordas lokale Datum im Unity-Panel anzeigt. Ich habeErstellen Sie ein .deb-Paket aus Skripten oder Binärdateienaber ich konnte kein Deb-Paket erstellen, weil es fehlschlägt.
Kann mir jemand eine Schritt-für-Schritt-Anleitung geben, was ich tun soll? Soweit ich weiß, hängt dieses Skript von ab python-appindicator
.
NOTIZ:
Ich möchte keine Links zu Debian/Ubuntu-Paketierungsanweisungen. Die meisten davon habe ich gesehen. Ich finde sie nicht anfängerfreundlich.
Antwort1
Es folgt ein einfaches Beispiel dafür, wie ein Quellpaket für ein Python-Skript aussehen könnte. Die meisten Paketierungs-Tutorials sind zwar etwas komplex, können aber wirklich hilfreich sein, wenn Sie auf ein Problem stoßen. Allerdings habe ich die Grundlagen der Debian-Paketierung zunächst gelernt, indem ich mir einfach Debian-Pakete angesehen habe. apt-get source
Etwas Ähnliches und anhand von Beispielen lernen.
Hier ist Ihr grundlegendes Quellpaket-Layout:
my-script/
-- myScript
-- debian/
-- changelog
-- copyright
-- compat
-- rules
-- control
-- install
Führen Sie es dch --create
im Verzeichnis aus, um einen ordnungsgemäß formatierten debian/changelog
Eintrag zu erstellen.
debian/UrheberrechtSollte aussehen, wie:
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/kompatibelkann einfach sein:7
debian/Regeln:
#!/usr/bin/make -f
%:
dh $@ --with python2
Beachten Sie, dass vor dem dh $@ --with python2
, keine Leerzeichen.
Hinweis: Python2 ist veraltet. Für eine einzelne Python-Datei funktioniert einfach dh $@
(ohne --with python
).
debian/kontrolle:
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/install:
myScript usr/bin/
Diese Datei gibt an, welche Datei in welchem Ordner installiert wird.
Bauen Sie es jetzt mitdebuild --no-tgz-check
Dadurch wird ein funktionsfähiges Deb-Paket erstellt. Lintian wird einige Warnungen bezüglich des Fehlens eines orig.tar.gz ausgeben, aber wenn Sie nicht vorhaben, ein richtiges Upstream-Projekt zu erstellen, das Tarball-Releases erstellt, sollten Sie das vorerst einfach ignorieren.
Antwort2
- Erstellen Sie auf Ihrer Startseite einen Ordner mit einem beliebigen Namen, z. B.: mypyscript
- Öffnen Sie den Ordner und erstellen Sie zwei Ordner mit den Namen „DEBIAN“ und „usr“.
- Öffnen Sie den Ordner DEBIAN. Erstellen Sie dort eine Textdatei (ohne Erweiterung) mit dem Namen „control“.
Öffnen Sie „control“, geben Sie Folgendes ein und speichern Sie es unter 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
Zurück zum Ordner mit dem Namen mypyscript. Öffnen Sie „usr“. Erstellen Sie einen Ordner mit dem Namen „bin“. Öffnen Sie „bin“ und fügen Sie dort Ihre Pythonscript-Datei ein.
- Sie können auch einen Menüeintrag vornehmen. Dies ist aber nicht zwingend erforderlich.
- Zurück zum Home-Ordner, in dem sich der Ordner „mypyscript“ befindet, oder schließen Sie den Dateibrowser.
- Öffnen Sie das Terminal. Stellen Sie sicher, dass sich das Terminal im Home-Ordner befindet. Geben Sie
dpkg -b mypyscript
ein. Drücken Sie dann die Eingabetaste. In wenigen Sekunden ist Ihr Deb-Paket fertig
Notiz:Bitte füllen Sie die Kontrolldatei ordnungsgemäß aus. Verwenden Sie keine Apostrophe. Sie dienen nur zur Bezeichnung der Namen.
Antwort3
Erstellen eines .deb
Pakets aus einem einzelnen Python 3-Skript (aktualisiert 2021)
Diese Antwort erscheint (und ist) im Vergleich zu den anderen lang. Aber im Gegensatz zur akzeptierten Antwort funktioniert sie mit Python 3 und im Jahr 2021. Außerdem erzeugt sie nicht viele Warnungen, da sie alle Anforderungen enthält, wie eine man
Seite.
So erstellen Sie ein Debian-Paket (ja, es funktioniert unter Ubuntu) aus einem einzigen Python 3-Skript. Lassen Sie uns zunächst das Skript erstellen. Es wird ein einfaches Hallo-Welt-Programm. Nennen Sie diese Datei hello-world
. Legen Sie sie in einen Ordner mit dem Namen hello-world-1.0.0
. Legen Sie den hello-world-1.0.0
Ordner in einen zweiten Ordner mit dem Namen work
. Die Verzeichnisstruktur ist hier jedoch ein bisschen ... seltsam. debuild
(das Tool, mit dem wir das Paket erstellen) legt die .deb
Datei ein Verzeichnis höher ab als dort, wo wir sie erstellt haben, sodass die Verzeichnisstruktur folgendermaßen aussieht:
Sofern nicht anders angegeben, gehe ich ab jetzt davon aus, dass Sie sich im work/hello-world-1.0.0
Verzeichnis befinden.
work/
├─ hello-world-1.0.0/
│ ├─ hello-world
Beachten Sie, dass ich im Dateinamen einen Bindestrich und keinen Unterstrich verwendet habe, da Debian keine Unterstriche in Paketnamen will. Ich habe auch die Dateierweiterung weggelassen, was in Ordnung ist, weil ich oben in meinem Skript ein Shebang hinzugefügt habe.
Hier ist das Python-Skript, das ich als Beispiel verwenden werde. Wie oben erwähnt, hat es den Namen hello-world
(ohne Dateierweiterung).
#!/usr/bin/env python3
def hello_world():
print("Hello world!")
if __name__ == "__main__":
hello_world()
Sehendiese Stack Overflow-Fragefür was if __name__ = "__main__:"
bedeutet. Der Shebang ist enthalten gemäßdiese Frage.
Stellen Sie zunächst sicher, dass der Code funktioniert, indem Sie ihn ausführen:
$ chmod +x ./hello-world
$ ./hello-world
Hello world!
Um die .deb
Datei zu erstellen, müssen die Pakete git
, devscripts
, build-essential
, lintian
, und pandoc
installiert sein. Mir ist bewusst, dass einige dieser Pakete vorinstalliert sind, aber ich wollte auch, dass diese Anleitung unter Debian funktioniert, also habe ich sie trotzdem hier aufgenommen. Sie können sie mit diesen Befehlen installieren.
sudo apt-get update
sudo apt-get install git devscripts build-essential lintian pandoc
Erstellen Sie innerhalb des hello-world-1.0.0
Ordners einen Ordner mit dem Namen debian
. Erstellen Sie darin einen Ordner mit dem Namen source
. Erstellen Sie außerdem direkt innerhalb des debian
Ordners die folgenden Dateien changelog
, compat
, control
, copyright
, install
, und rules
. Erstellen Sie innerhalb des debian/source
Ordners eine Datei mit dem Namen format
.
Ihr Verzeichnisbaum sollte nun so aussehen
work/
├─ hello-world-1.0.0/
│ ├─ debian/
│ │ ├─ source/
│ │ │ ├─ format
│ │ ├─ changelog
│ │ ├─ compat
│ │ ├─ control
│ │ ├─ copyright
│ │ ├─ install
│ │ ├─ rules
│ ├─ hello-world
Nun zum Inhalt dieser Dateien. Ich gehe davon aus, dass Sie sich direkt im hello-world-1.0.0
Ordner befinden.
debian/source/format
Sie können dies größtenteils ignorieren, aber wenn Sie sich fragen, wird es erklärt in§5.22in der Debian-Dokumentation.
3.0 (native)
debian/changelog
Diese Datei enthält das Änderungsprotokoll für das hello-world
Programm.
hello-world (1.0.0) unstable; urgency=medium
* Initial release:
-- John Doe <[email protected]> Sun, 28 Nov 2021 10:18:51 -0800
debian/compat
Hiermit wird der debhelper
Kompatibilitätsgrad festgelegt. Siehe§5.2in der Debian-Dokumentation
10
debian/control
Hiermit werden verschiedene Werte festgelegt, die Tools wie apt
zur Verwaltung des Pakets verwenden. Siehe§4.1in der Debian-Dokumentation
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
Diese Datei enthält Informationen zum Copyright und zur Lizenz des Quellcodes. Ich gehe hier davon aus, dass der Code unter der MIT-Lizenz steht. Ändern Sie dies nach Bedarf. Siehe§4.2in der Debian-Dokumentation
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
Diese Datei steuert, welche Dateien für Ihr Paket wo installiert werden. Siehe§5.11in der Debian-Dokumentation
hello-world usr/bin/
hello-world.1 usr/share/man/man1/
debian/rules
So erstellt Debian das Paket. Siehe§4.4in der Debian-Dokumentation. Ein Wort der Warnung: Verwenden Sie wie bei anderen Makefiles Tabulatoren zum Einrücken. Leerzeichen funktionieren nicht.
#!/usr/bin/make -f
%:
dh $@
Unser schönes hello-world
Paket sollte eine man
Seite haben. Aber das Format für Manpages ist komplex und schwer zu lesen. Also schreiben wir stattdessen die Manpage in Markdown und lassen pandoc
sie für uns konvertieren.
Erstellen Sie im Hauptverzeichnis (also direkt im hello-world-1.0.0
Ordner) eine Datei mit dem Namen hello-world.1.md
. Fügen Sie Folgendes in die Datei ein:
% 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.
Das Erstellen dieses und des Pakets erfordert einige Schritte. Lassen Sie uns stattdessen ein (Bash-)Skript erstellen. Erstellen Sie eine Datei mit dem Namen build
. Machen Sie sie ausführbar chmod +x ./build
. Fügen Sie Folgendes in die Datei ein:
#!/usr/bin/env bash
pandoc hello-world.1.md -s -t man > hello-world.1
debuild --no-tgz-check -uc -us
Dadurch wird die Manpage generiert und in der Datei mit dem Namen gespeichert hello-world.1
. Anschließend wird das Paket erstellt. Das -uc -us
bedeutet, dass wir es nicht mit einem GPG-Schlüssel signieren, da dies zu kompliziert ist. Führen Sie das Skript ( ./build
) aus, und wenn alles gut geht, befindet sich das generierte Paket im übergeordneten Verzeichnis work
.
Antwort4
Ich würde schnell nachschauen, großartig für die Erstellung von schnellen Apps und die Generierung von Debs. Google es oder Sie können Tutorials hier finden.http://developer.ubuntu.com/