Wie finde ich den Namen des conda Umgebung, in der mein code ausgeführt wird?
Ich bin auf der Suche nach ein guter Weg, um herauszufinden, den Namen des conda-Umgebung ich bin in innerhalb ausführen von code oder einer interaktiven python-Instanz.
Der use-case ist, dass ich bin läuft Jupyter notebooks mit sowohl Python 2 und Python 3-Kerneln von einem miniconda installieren. Die Standard-Umgebung ist Py3. Es gibt eine separate Umgebung für Py2. Im inneren des notebook-Datei, ich will es versuchen conda install foo
. Ich bin mit subcommand
dies zu tun, für jetzt, da ich kann nicht finden, eine programmatische conda äquivalent pip.main(['install','foo'])
.
Das problem ist, dass der Befehl benötigt, um zu wissen, die Namen der Py2-Umgebung zu installieren foo
es, wenn das notebook läuft mit der Py2-kernel. Ohne info, dass es installiert in der Standard-Py3 env. Ich möchte für den code, um herauszufinden, welche Umgebung Sie ist, und die rechten Namen für seine eigene.
Die beste Lösung, die ich habe, so weit ist:
import sys
def get_env():
sp = sys.path[1].split("/")
if "envs" in sp:
return sp[sp.index("envs") + 1]
else:
return ""
Gibt es eine weitere direkte/geeignete Weg, um dies zu erreichen?
- Wenn ich nicht Irre,
conda install x
installieren, in das, was die aktuelle Umgebung, ist: wenn das notebook in den Python-2-Umgebung dann es wird installiert in dieser Umgebung. - Ich habe gerade versucht das folgende experiment. In einem Jupyter notebook aus gestartet mein Standard anaconda Umgebung (aber mit beiden Py2 und Py3 ipython Kernel vorhanden) ich lief
!conda env list
in einer Zelle undimport subprocess; print(subprocess.check_output(['conda','env', 'list']).decode())
in einem anderen. Beide zeigen die Standard-env als aktiv, ob ich das notebook in Py2 oder Py3, so kann es sein, dass Befehle erteilt werden, die gegen das os zu betreiben, in welcher env mit dem jupiter-server wurde gestartet mit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du willst
$CONDA_DEFAULT_ENV
oder$CONDA_PREFIX
:In python:
Die environment-Variablen sind nicht gut dokumentiert. Finden Sie
CONDA_DEFAULT_ENV
hier erwähnt:https://www.continuum.io/blog/developer/advanced-features-conda-part-1
Die Infos nur auf
CONDA_PREFIX
ich finden konnte ist dieses Problem:https://github.com/conda/conda/issues/2764
sehr einfach, Sie könnte tun
['conda','env','list']
-- und dann bekomme ich die gleiche Antwort (root), ob ich dieses mit einem Py2 oder eine Py3-kernel. Die Prüfung dersys.path
jedoch zeigt unterschiedliche Ergebnisse für die einzelnen.Ich bin mit diesem:
es hat den Vorteil, dass man nicht davon ausgehen, das env ist im Pfad (und ist verschachtelt unter
envs
). Auch ist es nicht erforderlich, die Umgebung aktiviert werden, die übersource activate
.Edit: Wenn Sie wollen, um sicherzustellen, es funktioniert auf Windows -, zu:
Klären:
sys.executable
zeigt den Pfad des aktuellen python-interpreter (unabhängig von aktivieren/deaktivieren) -- zum Beispiel'/Users/danielsc/miniconda3/envs/nlp/bin/python'
. Der rest des Codes dauert nur den 3. aus der letzten Pfad-segment, das ist der name des Ordners, der Umwelt ist, die in der Regel auch der name des python-Umgebung.Da ähnliche Suchanfragen mit Bezug zu "wie bestimme ich meine python-Umwelt" führt zu dieser Antwort dachte ich, ich werde auch schweigen eine Art und Weise finde ich heraus, welche Umgebung ich bin derzeit mit meinem code aus.
Ich check die Lage meiner pip binäre Punkte, die zu einem Lage innerhalb der aktuellen Umgebung. Suchen Sie in der Ausgabe des folgenden Befehls können Sie leicht ermitteln, in welcher Umgebung Sie sind in. (Bitte beachten Sie, dass diese Lösung nicht anwendbar, wenn Sie geerbt haben pip-Pakete aus dem globalen Umfeld/Umwelt)
In Windows Eingabeaufforderung:
Wenn Sie innerhalb eines Jupyter Notebook fügen Sie ein Ausrufezeichen(!) bevor Sie den Befehl ausführen den Befehl in der host-Eingabeaufforderung:
Wird die Ausgabe wie folgt Aussehen:
YourEnvironmentName gibt den Namen der aktuellen Umgebung.
In Linux/Mac, die Sie verwenden können, die dem Befehl statt wo: (Nicht getestet).
Für Python ist3 Umgebung
Vom Jupyter notebook:
Diese sollten direkt auf die Stelle innerhalb der aktuellen Umgebung.
Edit: Oops, ich hatte nicht bemerkt Ivo's Antwort. Lassen Sie uns sagen, dass erweitere ich ein wenig darauf.
Wenn Sie Ihre python-Skript aus dem terminal:
Diese listet alle conda-Umgebungen, wie Sie vom terminal mit
conda env list
.Etwas besser:
Den
_ =
bit Stille des exist-status des Anrufs zuos.system
(0
wenn Sie erfolgreich ist), undgrep
wird nur ausdrucken, die Zeile mit dem aktivierten conda Umgebung.Wenn Sie nicht führen Sie Ihr Skript aus dem terminal (z.B. es ist geplanten über
crontab
), dann die oben nicht überall, um die "drucken" das Ergebnis. Stattdessen müssen Sie mit so etwas wie python -subprocess
Modul. Die einfachste Lösung ist wahrscheinlich, um zu laufen:Nämlich
output
ist ein string, der die Ausgabe der Befehlconda env list
, nicht dessen exit-status (die auch abgerufen werden können, finden Sie in der Dokumentation dessubprocess
- Modul).Nun, Sie haben einen string mit den Informationen zu den aktiviert conda Umgebung, die Sie durchführen können, je nachdem, was Sie testen müssen (mit regular expressions) zu erfüllen (oder nicht) installiert, die in Ihrer Frage erwähnt.
Bemerkung.
Natürlich
print(output)
im block oben keinen Effekt haben, wenn Ihr Skript nicht ausgeführt werden vom terminal, aber wenn Sie testen, wie der block in einem Skript, das Sie ausführen aus dem terminal, dann Sie können stellen Sie sicher, dass es Sie gibt, was Sie wollen. Zum Beispiel können Sie drucken Sie diese Informationen in einer log-Datei (mit derlogging
Modul wird empfohlen).