Korrektes Installationsskript für ein kleines Python-Programm (Nicht-Modul) unter Linux

8

Ich habe ein kleines Programm in Python, das aus einer .py-Datei und einem Verzeichnis von Dateien besteht, die vom Programm benutzt werden.

Ich würde gerne wissen, wie man ein Installationsverfahren für einen Benutzer mit Administratorrechten unter Linux erstellt, damit er das Programm auf seinem System installieren und über die Befehlszeile mit Optionen und Parametern verwenden kann. BEARBEITEN: Der Teil, mit dem ich Probleme habe, ist, dass das Programm, sobald es installiert ist, die Datendateien, die sich in einem 'Daten'-Unterordner befinden, abruft.

Wäre ein Setup-Skript, das die ausführbare Programmdatei in /usr/local/bin und den Datenordner in /usr/share/my_program/data installiert, eine akzeptable Lösung? Etwas wie:

%Vor%

Um dies zu tun, muss ich im Programm annehmen, dass die Datendateien in /usr/share/my_program/data sein werden. Aber ich würde dem Benutzer auch die Wahl lassen, das Programm zu benutzen, ohne es zu installieren. Dann müsste ich annehmen, dass sich die Daten relativ zur ausführbaren Programmdatei in "./data" befinden. Wie soll ich dieses Problem lösen? Ich kann mir ein paar Wege vorstellen, aber mein Gefühl ist, dass ich ein Durcheinander verursache, wo es eine klare und korrekte Antwort geben sollte.

Momentan überlege ich, eine try except-Klausel zu verwenden:

%Vor%

Auch hier fühle ich, dass es ein wenig verworren ist. Wie würden Sie für die Installation vorgehen?

Vielen Dank

BEARBEITEN: LÖSUNG ANGEWANDT

Basierend auf den Antworten auf diese Frage und auf die Fragen, die von FakeRainBrigand vorgeschlagen wurden ( Wie kann ich den Pfad des laufenden Skripts in Python? ), ich habe ein Installationsskript erstellt, das folgendermaßen aussieht:

%Vor%

Und in meinem Programm den folgenden Code hinzugefügt:

%Vor%

Ich verwende dann os.path.join(DATA_PATH, "file-to-reach.txt") , damit das Programm seine Daten erreichen kann, die unter /usr/share/my_program gefunden wurden.

Ich würde mich freuen, Kommentare zu haben, wenn eine akzeptierte Methode verfügbar ist.

Prost

    
Morlock 15.12.2011, 02:42
quelle

3 Antworten

11
  

Bin ich falsch, dass die Methode setup.py (zB: python setup.py install) nur für die Installation von Modulen gedacht ist, die später innerhalb des Interpreters oder anderer Skripte verwendet werden?

Ja. Du liegst falsch.

Sie können in das Skriptverzeichnis von Python installieren. Lesen Sie weiter, was setup.py kann. Ссылка

Das ist eigentlich sehr, sehr einfach. Und es hat nichts mit Python zu tun.

Ein Python-Skript kann von überall ausgeführt werden. Linux bietet Ihnen eine breite Palette von Möglichkeiten, um eine ausführbare Datei ( /path/to/my_program.py ) ausführbar zu machen.

All diese großen und vielfältigen Arten haben drei Dinge gemeinsam. Drei Dinge, die für Linux von zentraler Bedeutung sind und überhaupt nichts mit Python zu tun haben.

  1. Die Datei muss sich in% des Benutzers PATH befinden.

  2. Die Datei muss die Berechtigung "execute" haben ( chmod +x ... ).

  3. Die Datei muss mit #!/usr/bin/env python beginnen.

Wie kann dies geschehen?

Für # 1.

  • Sie können den PATH überprüfen und die Datei in eines der Verzeichnisse auf dem PATH setzen. Dafür gibt es viele Standardoptionen. /usr/local/bin , zum Beispiel.

  • Sie können den PATH des Benutzers so ändern, dass er ein neues Verzeichnis enthält. /path/to , zum Beispiel, damit /path/to/my_program.py gefunden werden kann.

Für # 2. Sie führen das entsprechende chmod +x aus.

Für # 3. Sie schreiben die entsprechende Codezeile.

Weitere Informationen finden Sie in "Linux Shell". Alle "Shell" -Programme haben die gleichen drei Funktionen. %Code%. bash , csh , python usw. usw. usw.

  

ruft die Datendateien ab, die in einem Unterordner 'data' enthalten sind, und verweisen auf diese beispielsweise als perl .

Das wäre ein schlechtes Design.

Linux (außerhalb von Python) bietet viele Möglichkeiten, um nützliche Dateien zu finden.

  1. Installieren Sie sie an einem bekannten Ort mit einem bekannten Pfad. ./data/this_file.dat kommt mir in den Sinn. Dies ist vielleicht nicht der beste Ort, aber es ist ziemlich beliebt.

  2. Verwenden Sie Umgebungsvariablen. /usr/local/share kann beispielsweise auf den Speicherort der Datei gesetzt werden. Das können Sie MYAPP_HOME Sehr beliebt verwenden.

  3. Verwenden Sie die Variable os.path.join( os.environ['MYAPP_HOME'], 'data', 'this_file.dat' ) , um herauszufinden, wo sich Ihr Skript befindet. Verwenden Sie dann __file__ , um das Verzeichnis zu lokalisieren, und stellen Sie den Datenpfad mit os.path

  4. zusammen
S.Lott 15.12.2011, 02:50
quelle
2

Wenn Sie keine externen Abhängigkeiten haben, wie Datenbanken oder Einstellungen, die konfiguriert werden müssen, sollte ein einfaches setup.sh-Skript ausreichen.

%Vor%

Je nach Ihren Bedürfnissen kann es komplizierter werden.

    
FakeRainBrigand 15.12.2011 02:52
quelle
0

Sie könnten eine ausführbare zip-Datei erstellen, die das von Ihnen verwendete Skript und die Datendateien enthält. Eine Installation muss diese Datei nur irgendwo in $PATH ablegen und sie ausführbar machen: chmod +x my-program .

python: Können ausführbare zip-Dateien Datendateien enthalten?

Wenn Sie eine geeignete setup.py erstellen, die angibt, wie Sie Ihre Daten installieren Dateien und das Skript dann gibt es viele weitere Optionen, um das Programm zu installieren zB

%Vor%

wobei pip über einen Systempacker installiert werden kann, your-program.tar.gz , das Sie mit python setup.py sdist erstellen können.

    
jfs 15.12.2011 03:23
quelle

Tags und Links