2016-05-04 10 views
5

Wo ist der gemeinsame Speicherort/Verzeichnis zum Speichern der Konfiguration in einem Python virtualenv?Speicherort für die Konfiguration in einem virtualenv

Für Linux gibt es /etc für Benutzer Sachen gibt es XDG_CONFIG_HOME (~/.config) aber für virtualenv ...?

Ich weiß, dass ich meine Konfiguration an einem beliebigen Ort speichern kann, aber vielleicht gibt es einen gemeinsamen Ort, der meine Anwendung von Python-Experten leichter verständlich macht.

+0

Ich habe versucht, einen Überblick über die häufigsten Optionen in meiner Antwort unten zu geben, um zu vermeiden, dass diese Frage als Meinung/Diskussion markiert wird. –

+0

@tedmiston ja, diese Frage ist nicht wie "wie zwei Ganzzahlen in Python hinzufügen?" Gibt es keine einzige richtige Antwort. Da es bereits drei Stimmen gibt, glaube ich nicht, dass die Polizei von StackO diese Meinung/Diskussionsfrage bemerken wird ...Ja, strikt das Lesen der StackO-Regeln, sollte diese Frage geschlossen werden :-) – guettli

+0

Ich hoffe, dass jemand anderes eine weitere Antwort zum Vergleich hinzufügen wird. Dies ist sicherlich ein Problem, das wir alle haben. –

Antwort

4

Also ich denke, das die häufigste Methode ist ...

1. postactivate mit virtualenvwrapper

Ich habe immer diese Datei selbst im postactivate getan. Bei diesem Ansatz können Sie entweder Umgebungsvariablen direkt in dieser Datei definieren (meine Präferenz) oder in einer separaten Datei in Ihrem Projektverzeichnis, die Sie in der Datei potickrivate source haben. Um genau zu sein, ist dies tatsächlich ein Teil von virtualenvwrapper, im Gegensatz zu virtualenv selbst.

http://virtualenvwrapper.readthedocs.io/en/latest/scripts.html#postactivate

(Wenn Sie wirklich sauber sein wollen, können Sie auch ungesetzt Ihre Umgebung Vars in der postdeactivate-Datei.)

Alternativ können Sie dies direkt in der activate Datei tun. Ich finde diesen Ansatz weniger wünschenswert, weil dort auch andere Dinge vor sich gehen.

https://virtualenv.pypa.io/en/latest/userguide.html#activate-script

Zwei beliebte Alternativen ich auch sind verwendet haben:

2. .env mit autoenv

Unabhängig von virtualenv, eine andere Annäherung an das gleiche Problem zu lösen ist autoenv ‚Kenneth Reitz, die automatisch ein .env Quellen, wenn Sie in das Projektverzeichnis cd. Ich benutze dieses nicht mehr viel.

https://github.com/kennethreitz/autoenv

3. .env mit Python Entkoppeln

Wenn Sie nur die Umgebungsvariablen für Python-Code müssen (und nicht zum Beispiel in einem Shell-Skript in Ihrem Projekt), dann ist Python Entkoppeln ein verwandte Ansatz, der eine vereinfachte .env Datei im Stammverzeichnis Ihres Projekts verwendet. Ich benutze es heutzutage immer öfter persönlich.

https://github.com/henriquebastos/python-decouple/


Ich bin etwas überrascht, das zu sehen ist, nicht in The Hitchhiker's Guide to Python - Virtual Environments ausführlich diskutiert. Vielleicht können wir aus dieser Frage eine Pull-Anfrage generieren.

+0

Welche dieser Ansätze funktionieren für Prozesse, die nicht von einer Shell aus gestartet werden? Zum Beispiel Systemd Daemon oder Wsgi-Worker? – guettli

+0

@guettli Ich bin mir nicht ganz sicher (nicht etwas, was ich versucht habe), aber ich denke, # 3 könnte für diesen Ansatz einfacher sein als andere, weil es zur Laufzeit liest, wenn das virtuelle env aktiviert ist. Dies setzt voraus, dass Sie Ihre Umgebungsvariablen nur im Python-Prozess und nicht in anderen Prozessen benötigen. Für die anderen könnten Sie diesen Ansatz versuchen, obwohl ich es nicht getestet habe - https://discourse.mafiasi.de/t/python-virtualenv-and-systemd-for-graphite/652. –

Verwandte Themen