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


78

Ich habe ein einzelnes Python-Skript, das ich als Deb-Paket verteilen möchte. Dies ist ein Indikator, der das lokale Datum im Unity-Panel anzeigt. Ich habe ein .deb-Paket aus Skripten oder Binärdateien erstellt, aber ich konnte kein deb-Paket erstellen, da es fehlschlägt.

Kann mir jemand eine schrittweise Anleitung geben, was ich tun soll? Soweit ich weiß, hängt dieses Skript davon ab python-appindicator.

HINWEIS:
Ich möchte keine Links zu Debian / Ubuntu-Paketierungsanweisungen. Ich habe die meisten von ihnen gesehen. Ich finde sie nicht anfängerfreundlich.


6
Während Debian- und Ubuntu-Paketierungsanweisungen nicht für Anfänger geeignet sind (vertrau mir, ich weiß), treten in vielen GUI-Anwendungen, die Debs für Sie erstellen, nur eine Reihe von Fehlern auf, wenn Sie eine endgültige Paketprüfung wie lintian ausführen. Wenn Sie es ernst meinen mit dem Verpacken, dann ist es der beste Weg, es auszuprobieren und die Anweisungen durchzuarbeiten :)
Thomas Boxley

Ich kenne mich mit Verpackung nicht aus, aber die Funktionalität, die Sie hinzufügen möchten, ist in Unity integriert.
Es ist Willem

Antworten:


84

Das Folgende ist ein grundlegendes Beispiel dafür, wie ein Quellpaket für ein Python-Skript aussehen könnte. Während die meisten Lernprogramme zum Verpacken etwas komplex sind, können sie wirklich hilfreich sein, wenn Sie auf ein Problem stoßen. Das heißt, ich habe zuerst die Grundlagen der Debian-Paketierung gelernt, indem ich mir einfach Debian-Pakete angesehen habe. apt-get sourceetwas ähnliches und lerne durch beispiel.

Hier ist Ihr grundlegendes Quellpaket-Layout:

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

Führen Sie dch --createdas Verzeichnis aus, um einen ordnungsgemäß formatierten debian/changelogEintrag zu erstellen .

debian / copyright sollte so aussehen:

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 / compat kann nur sein:7

debian / rules :

#!/usr/bin/make -f

%:
    dh $@ --with python2

Beachten Sie, dass vor "tab" dh $@ --with python2keine Leerzeichen stehen müssen.

debian / control :

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.

Jetzt baue es mit debuild --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 geeignetes Upstream-Projekt für Tarball-Releases zu erstellen, möchten Sie dies wahrscheinlich vorerst einfach ignorieren.


12
Als Packager (und Backporter) packe ich ziemlich oft Python-Skripte. Ich kann mit Sicherheit sagen, dass diese Antwort die vollständigste Erklärung dafür ist, was zu tun ist, um ein Paket für ein einzelnes Python-Skript zu erstellen.
Thomas Ward

2
Könnten Sie es auch für Python 3 aktualisieren? Ich denke, wir müssen Änderungen an debian/rulesund vornehmen debian/control, aber da bin ich mir nicht sicher.
Aditya

1
@Aditya, vielleicht ist eine neue Frage für Python3 in Ordnung? Die Antwort wäre nicht sehr unterschiedlich, aber diese Antwort zielt darauf ab, das einfachste / einfachste Beispiel für das Packen eines Python-Skripts zu sein. Ich bin mir nicht sicher, ob ich es mit mehreren Implementierungen überladen möchte.
Andrewsomething

@andrewsomething: Dann könnten Sie an diesem interessiert sein, was mich dazu veranlasste, diesen Kommentar zu hinterlassen ... Ein bisschen Bearbeitung ist erforderlich, ich würde versuchen, es zu
tun

1
Was ist mit den Bibliotheken? Wenn das Python-Skript Bibliotheken importiert, funktioniert es nicht
D.Snap

18
  1. Erstellen Sie einen Ordner mit einem beliebigen Namen in Ihrem Zuhause, z. B .: mypyscript
  2. Öffne den Ordner und erstelle 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. Öffne 'control' und tippe wie folgt und speichere es auf 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. Öffne 'usr'. Erstellen Sie einen Ordner mit dem Namen "bin". Öffne 'bin' und füge dort deine Pythonscript-Datei ein.

  6. Sie können auch einen Menüeintrag vornehmen. Das ist aber nicht wesentlich.
  7. Zurück zum Home-Ordner, in dem sich der Ordner 'mypyscript' befindet, oder schließen Sie den Dateibrowser.
  8. Terminal öffnen. Stellen Sie sicher, dass sich das Terminal im Basisordner befindet. Typ. dpkg -b mypyscriptDann drücken Sie die Eingabetaste. In Sekunden ist Ihr Deb-Paket fertig

Hinweis: Bitte füllen Sie die Kontrolldatei korrekt aus. Verwenden Sie keine Apostrophe. Es dient nur zur Anzeige der Namen.


1
Funktioniert super! Die akzeptierte Antwort ist komplex.
SuB

Vergessen Sie nicht, die Berechtigung von 'myscript' auf 755 und den Besitzer auf root zu ändern.
SuB

Wie erstelle ich einen Menüeintrag?
zu tun

9

Sie können es mit Debreate versuchen , einem GUI-Tool zum Erstellen von Paketen.


Debcreate ist cool. Bisher gefällt es mir, ich habe heute damit angefangen, aus Python-Quellcode zu bauen.
answerSeeker




0

Sie könnten versuchen, Debreate zu verwenden

Dies ist eine GUI-Oberfläche zum Erstellen von Paketen und Dingen, die Sie mit der PPA auch dann verwenden können, wenn Sie sie nicht von der oben aufgeführten Website herunterladen möchten.

sudo add-apt-repository ppa:antumdeluge/<ppaname>; sudo apt update; sudo apt install debreate

Ich habe das ppa so komprimiert, dass es als eine einzige Codezeile ausgeführt wird! Vielen Dank für die tolle Frage und stellen Sie sicher, dass Sie diese Codezeilen weiterhin in das Terminal schreiben!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.