Nicht-Python-Dateien mit setup.py einbinden
Wie mache ich setup.py
enthält eine Datei, die nicht Teil des Codes? (Genauer gesagt, ist es eine Lizenz-Datei, aber könnte es sein eine andere Sache.)
Ich will die Kontrolle über den Speicherort der Datei. Im original Ordner, wird die Datei in das root-Paket. (d.h. auf der gleichen Ebene wie der oberste __init__.py
.) Ich will es bleiben genau da, wenn das Paket installiert ist, unabhängig vom Betriebssystem. Wie mache ich das?
InformationsquelleAutor der Frage Ram Rachum | 2009-10-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wahrscheinlich der beste Weg, dies zu tun, ist die Verwendung der
setuptools
package_data
Richtlinie. Dies bedeutet, dass mitsetuptools
(oderverteilen
) stattdistutils
aber das ist eine sehr nahtlose "upgrade".Hier ist eine vollständige (aber nicht getestet) Beispiel:
Beachten Sie, dass die Linien, die kritisch sind hier:
package_data
ist eindict
package-Namen (leer = alle Pakete), um eine Liste von mustern (globs). Zum Beispiel, wenn Sie wollen, geben Sie nur die Dateien in Ihr Paket, Sie können das auch tun:Die Lösung ist hier auf jeden Fall nicht umbenennen-nicht-
py
Dateien mit einem.py
Erweiterung.Sehen Ian Bicking Präsentation für mehr info.
UPDATE: ein Anderes [Besseres] Ansatz
Anderen Ansatz, die gut funktioniert, wenn Sie nur wollen, um eine Kontrolle der Inhalte der source-distribution (
sdist
) und Dateien außerhalb des Pakets (z.B. top-level-Verzeichnis) ist das hinzufügen von einMANIFEST.in
- Datei. Sehen die Python-Dokumentation für das format dieser Datei.Da das schreiben dieser Antwort, habe ich festgestellt, dass mit
MANIFEST.in
ist in der Regel eine weniger frustrierend Ansatz, so stellen Sie sicher, dass Ihre Quell-distribution (tar.gz
) hat die Dateien, die Sie benötigen.Zum Beispiel, wenn Sie wollte die
requirements.txt
von top-level-rekursiv-die top-level - "data" - Verzeichnis:Dennoch, um für diese Dateien kopiert werden beim installieren Zeit, um das Paket den Ordner in Website-Pakete, die Sie benötigen, zu liefern
include_package_data=True
zu densetup()
Funktion. Sehen Zugabe Von Nicht-Code-Dateien für weitere Informationen.InformationsquelleAutor der Antwort Hans L
Zu erreichen, was Sie beschreiben wird, nehmen Sie zwei Schritte...
Schritt 1: fügen Sie die Datei dem Quell-tarball, es in dem MANIFEST
Erstellen Sie eine MANIFEST Vorlage in dem Ordner, der enthält setup.py
Das MANIFEST ist im wesentlichen eine Textdatei mit einer Liste aller Dateien, die aufgenommen werden, in den Quelltext-tarball herunter.
Hier ist, was das MANIFEST für mein Projekt so Aussehen:
Hinweis: Während sdist nicht fügen Sie einige Dateien automatischich bevorzuge, um explizit anzugeben, um sicher zu sein, anstatt zu prognostizieren, was es tut und nicht tut.
Schritt 2: installieren Sie die Daten-Datei auf der source-Ordner ändern setup.py
Da Sie schauen, um eine Daten-Datei (LICENSE.txt), um die Quelle Ordner installieren, müssen Sie die Daten ändern, installieren, Pfad in übereinstimmung mit der Quelle installieren Weg. Dies ist notwendig, da standardmäßig die Daten-Dateien installiert sind, an einen anderen Ort als die Quelldateien.
Die Daten ändern, installieren, dir entsprechend die Quelle installieren dir...
Ziehen, die installieren dir info von distutils mit:
Ändern Sie die Daten, die installieren dir entsprechend die source-install-dir:
Und fügen Sie die Daten-Datei und den Speicherort zu setup():
Hinweis: Die oben genannten Schritte erledigen sollte genau das, was Sie beschrieben haben, in einem standard-Weise, ohne dass irgendwelche Bibliotheken mit der Endung.
InformationsquelleAutor der Antwort Evan Plaice
In setup.py unter setup( :
InformationsquelleAutor der Antwort Dashing Adam Hughes
Hier ist eine einfachere Antwort, die für mich gearbeitet.
Erste, je ein Python-Dev ' s Kommentar oben, setuptools ist nicht erforderlich:
Das ist toll, weil die Umsetzung eine setuptools Anforderung auf der Verpackung bedeutet, dass Sie haben, um es zu installieren auch. Kurz gesagt:
InformationsquelleAutor der Antwort Gringo Suave
erstellen
MANIFEST.in
im Projekt-root mitrecursive-include
auf das gewünschte Verzeichnis oderinclude
mit der Datei name.die Dokumentation kann hier gefunden werden
InformationsquelleAutor der Antwort All Іѕ Vаиітy
Ich wollte nur follow-up auf etwas, das ich gefunden, die das arbeiten mit Python 2.7 auf Centos 6. Hinzufügen der package_data oder data_files wie oben erwähnt nicht für mich arbeiten. Ich fügte hinzu, ein MANIFEST.Mit den Dateien, die ich wollte welche die nicht-python-Dateien in das tar-Archiv, aber nicht installieren Sie Sie auf dem Zielcomputer über U /MIN.
In das Ende, ich war in der Lage, um die Dateien in meine Lösung mit den "Optionen" im setup - /setuptools. Die option Dateien lassen ändern Sie Sie zu verschiedenen Abschnitten der spec-Datei aus setup.py. Wie folgt.
Datei - MANIFEST.in:
Datei - filewithinstallcommands:
InformationsquelleAutor der Antwort Scott Bowers
Herausgefunden Problemumgehung: umbenannt habe ich meine
lgpl2.1_license.txt
zulgpl2.1_license.txt.py
und legte einige dreifachen Anführungszeichen um den text. Nun, ich brauche nicht zu verwenden, diedata_files
option noch die Angabe von absoluten Pfaden. So dass es ein Python-Modul ist hässlich, ich weiß, aber ich halte es für weniger hässlich als die Angabe absoluter Pfade.InformationsquelleAutor der Antwort Ram Rachum