Ich habe zwei Niederlassungen, Entwicklung und Produktion. Jedes hat Abhängigkeiten, von denen einige unterschiedlich sind. Die Entwicklung weist auf Abhängigkeiten hin, die sich selbst in der Entwicklung befinden. Ebenso für die Produktion. Ich muss auf Heroku bereitstellen, das die Abhängigkeiten der einzelnen Zweige in einer einzelnen Datei mit dem Namen "require.txt" erwartet.
Was ist der beste Weg, um zu organisieren?
Was ich gedacht habe:
- Pflegen Sie separate Anforderungsdateien, eine in jedem Zweig (muss häufige Zusammenführungen überstehen!)
- Sagen Sie Heroku, welche Anforderungsdatei ich verwenden möchte (Umgebungsvariable?)
- Schreiben Sie Bereitstellungsskripte (temporären Zweig erstellen, Anforderungsdatei ändern, festschreiben, bereitstellen, temporären Zweig löschen)
python
deployment
heroku
requirements.txt
Charles R.
quelle
quelle
Antworten:
Sie können Ihre Anforderungsdateien kaskadieren und das Flag "-r" verwenden, um pip anzuweisen, den Inhalt einer Datei in eine andere aufzunehmen. Sie können Ihre Anforderungen wie folgt in eine modulare Ordnerhierarchie aufteilen:
Der Inhalt der Dateien würde folgendermaßen aussehen:
common.txt:
dev.txt:
prod.txt:
Außerhalb von Heroku können Sie jetzt folgende Umgebungen einrichten:
oder
Da Heroku im Projektstamm speziell nach "require.txt" sucht, sollte es nur das Produkt wie folgt spiegeln:
Anforderungen.txt:
quelle
base.txt
mit 3 Paketen unddev.txt
1 Paket (und-r base.txt
). ALLE 4 Pakete sind in meiner virtuellen Umgebung installiert. Ich möchte jetzt das 5. Paket installieren und es in der Basis auflisten, NICHT in dev. Wie mache ich das? Klar, ich kann es installieren undpip freeze > base.txt
das löst das Problem NICHT. Es setzt dann die 4. Dev-Abhängigkeit in die Basis, die ich nicht will.Eine praktikable Option, die es heute nicht gab, als die ursprüngliche Frage und Antwort veröffentlicht wurde, ist die Verwendung von pipenv anstelle von pip zum Verwalten von Abhängigkeiten.
Mit pipenv ist die manuelle Verwaltung von zwei separaten Anforderungsdateien wie bei pip nicht mehr erforderlich. Stattdessen verwaltet pipenv die Entwicklungs- und Produktionspakete selbst über Interaktionen in der Befehlszeile.
So installieren Sie ein Paket für die Produktion und Entwicklung:
So installieren Sie ein Paket nur für die Entwicklungsumgebung:
Über diese Befehle speichert und verwaltet pipenv die Umgebungskonfiguration in zwei Dateien (Pipfile und Pipfile.lock). Herokus aktuelles Python-Buildpack unterstützt nativ pipenv und konfiguriert sich selbst über Pipfile.lock, falls es anstelle von require.txt vorhanden ist.
Eine vollständige Dokumentation des Tools finden Sie unter dem Pipenv-Link.
quelle
Wenn Sie zwischen Umgebungen auf demselben Computer wechseln möchten, müssen Sie möglicherweise für jede Umgebung, in die Sie wechseln möchten, unterschiedliche virtuelle Env-Ordner erstellen.
quelle