2016-07-28 4 views
2

Ich habe eine Python-Anwendung, die mit einem Befehlszeilenskript kommt. Ich belichte das Skript über setuptools "Einstiegspunkt" -Feature. Wenn ein Benutzer das Skript ausführt, möchte ich, dass die Umgebung mit der requirements.txt des Pakets konsistent ist. Dies bedeutet, dass die Umgebung Versionen jedes Abhängigkeitspakets enthalten muss, die den Versionsspezifizierern in requirements.txt entsprechen.Python: Legen Sie PYTHONPATH nach Anforderungen.txt zur Laufzeit

Ich weiß, dass dies meine Benutzer erstellen eine virtuelle Umgebung, indem sie mit venv/virtualenv erreicht werden kann, installieren Sie requirements.txt darin, und aktivieren Sie die virtuelle Umgebung, wenn sie das Skript ausführen. Ich möchte nicht die Last auferlegen, Benutzer virtualenv manuell aufzurufen. Rubys bundler löst dieses Problem, indem es bundler/setup bereitstellt - wenn es geladen wird, ändert es Rubys $LOAD_PATH, um den Inhalt des Gemfile (analog von requirements.txt) widerzuspiegeln. Daher kann es am Anfang eines Skripts platziert werden, um die Laufzeitumgebung transparent zu steuern. Hat Python eine Entsprechung? Das heißt, eine Möglichkeit, die Umgebung zur Laufzeit gemäß requirements.txt einzustellen, ohne dem Benutzer zusätzliche Komplexität aufzuerlegen?

+0

Auf Fenster: da Sie ein Kommandozeilen-Skript laufen lassen, warum und –

+0

@ Jean-FrançoisFabre OK verwenden 'setx PYTHONPATH' die Datei nicht lesen, ich in das aussehen wird, aber ich für eine grenzüberschreit bin der Hoffnung, Plattformlösung. –

+0

Mögliches Duplikat von [Wie wird Python-Projekt einschließlich Abhängigkeiten erstellt?] (Http://stackoverflow.com/questions/37606773/how-to-build-python-project-including-dependencies) –

Antwort

1

Hat Python ein Äquivalent? Das heißt, Sie können die Umgebung zur Laufzeit entsprechend der Anforderung.txt einrichten, ohne dem Benutzer zusätzliche Komplexität aufzuerlegen?

Ja, mehr als eins.

One ist pex

PEX ist eine Bibliothek zum Erzeugen von .pex (Python-Executable) Dateien, die ausführbare Python-Umgebungen im Geist des virtualenvs sind.

und das andere ist Platter:

Platter ein Werkzeug für Python, die Installationen auf Unix Servern vereinfacht. Es ist eine dünne Wrapper um Pip, virtualenv und Rad und Aids bei der Erstellung von Paketen, die ohne kompilieren oder herunterladen auf Servern installieren können.

+0

Vielen Dank. 'Pex' ist eine perfekte Lösung für dieses Problem. –

1

Ich sehe nicht, warum es für ein Python-Programm nicht möglich wäre, seine eigenen Abhängigkeiten vor dem Import zu installieren, aber es ist unbekannt in der Python-Gemeinschaft.

Ich würde eher Optionen betrachten, um Ihre Anwendung zu einer eigenständigen ausführbaren Datei zu machen, wie zum Beispiel here erklärt.

+0

Danke Markus. Lassen Sie mich klarstellen: Ich brauche das Skript nicht, um die Abhängigkeiten zu installieren, wenn es ausgeführt wird. Ich bin damit einverstanden, dass meine Benutzer eine einmalige "pip install --requirements.txt" machen, nachdem sie das Paket heruntergeladen haben. Das Problem ist die zukünftige Stabilität. Die App verwendet bestimmte Versionen bestimmter Pakete.Ich muss sicherstellen, dass die ausführbare Datei nach der Installation unbegrenzt in einer Umgebung mit diesen bestimmten Versionen ausgeführt wird, auch wenn ein Benutzer diese Pakete aktualisiert. Die Lösung sollte auch plattformübergreifend sein (Windows, Mac, Linux). Ich werde in 'py2exe' schauen, aber ich hoffe auf eine einfachere Lösung. –

+0

[certbot] (https://github.com/certbot/certbot) (geb. Letsencrypt) installiert bei der Ausführung eigene Abhängigkeiten in einem virtualenv, obwohl Sie technisch ein Shell-Skript ausführen, das die Installation durchführt und dann das eigentliche Programm aufruft . – jwodder

Verwandte Themen