Wie erstelle ich ein Deb-Paket für ein einzelnes Python-Skript?

Wie erstelle ich ein Deb-Paket für ein einzelnes Python-Skript?

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 sourceEtwas Ä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 --createim Verzeichnis aus, um einen ordnungsgemäß formatierten debian/changelogEintrag 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

  1. Erstellen Sie auf Ihrer Startseite einen Ordner mit einem beliebigen Namen, z. B.: mypyscript
  2. Öffnen Sie den Ordner und erstellen Sie zwei Ordner mit den Namen „DEBIAN“ und „usr“.
  3. Öffnen Sie den Ordner DEBIAN. Erstellen Sie dort eine Textdatei (ohne Erweiterung) mit dem Namen „control“.
  4. Ö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
    
  5. 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.

  6. Sie können auch einen Menüeintrag vornehmen. Dies ist aber nicht zwingend erforderlich.
  7. Zurück zum Home-Ordner, in dem sich der Ordner „mypyscript“ befindet, oder schließen Sie den Dateibrowser.
  8. Öffnen Sie das Terminal. Stellen Sie sicher, dass sich das Terminal im Home-Ordner befindet. Geben Sie dpkg -b mypyscriptein. 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 .debPakets 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 manSeite.

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.0Ordner 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 .debDatei 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.0Verzeichnis 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 .debDatei zu erstellen, müssen die Pakete git, devscripts, build-essential, lintian, und pandocinstalliert 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.0Ordners einen Ordner mit dem Namen debian. Erstellen Sie darin einen Ordner mit dem Namen source. Erstellen Sie außerdem direkt innerhalb des debianOrdners die folgenden Dateien changelog, compat, control, copyright, install, und rules. Erstellen Sie innerhalb des debian/sourceOrdners 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.0Ordner 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-worldProgramm.

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 debhelperKompatibilitätsgrad festgelegt. Siehe§5.2in der Debian-Dokumentation

10

debian/control

Hiermit werden verschiedene Werte festgelegt, die Tools wie aptzur 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-worldPaket sollte eine manSeite haben. Aber das Format für Manpages ist komplex und schwer zu lesen. Also schreiben wir stattdessen die Manpage in Markdown und lassen pandocsie für uns konvertieren.

Erstellen Sie im Hauptverzeichnis (also direkt im hello-world-1.0.0Ordner) 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/

verwandte Informationen