jede Art und Weise zu erzählen, wenn der Benutzer die python-Umgebung ist anaconda
ich bin die Verteilung einer in-house python-lib, wo ich wie zu machen Sie es so, dass, wenn der Benutzer wird mit anaconda, die beim ausführen dieser Datei, dass änderungen an den Abhängigkeiten der Bibliothek automatisch vorgenommen werden. (diese ist auf Anfrage. wenn es nach mir geht, würde ich lassen Sie die Nutzer die Kontrolle über Ihre eigenen Pakete.)
bisher habe ich mit so etwas wie
def _user_has_conda():
cmd = 'conda --help'
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
if len(out) > 0 and len(err) == 0:
return True
else:
return False
aber das ist wirklich nur sagt mir, wenn der user anaconda auf Ihrem system installiert, und nicht, ob die aktuelle python-Prozess läuft im anaconda-Umgebung.
was ich merke ist, dass wenn ich starten Sie eine python oder ipython-shell, sehe ich "Python 3.3.3 |Continuum Analytics, Inc|" an der Spitze. meine nächste Idee wäre, zu versuchen zu finden, wie man diese Zeichenfolge, um zu sehen, wenn "Continuum Analytics" ist es, und wenn dem so ist, davon ausgehen, dass der Benutzer in anaconda.
ich bin sicher, dass es bessere Ideen gibt, und das ist, warum ich hier bin.
danke.
- In deinem Beispiel sollten Sie nicht verwenden
shell=True
aber mit einemcmd
von der form['conda', '--help']
. Zu Ihrer Frage: könnte man nicht überprüfensys.executable
und sehen, ob der Dolmetscher befindet sich in einer anaconda-Installationsverzeichnis? - was ist der Nachteil bei der Verwendung shell=True?
- Es muss eine neue shell starten, welche dann führt Ihr den Befehl, was bedeutet, dass Sie hinzufügen einige overhead. Im Allgemeinen Fall (zwar nicht die, die Sie gezeigt haben) kann es Sicherheit verleiht Risiken, wie die Ausführung von beliebigem code. Verwenden Sie es nur, wenn Sie wirklich brauchen einige shell-Funktion (z.B. Sie möchten ausführen mehrere Befehle in eine pipe oder Sie wollen verwenden Sie einige shell-built-in etc.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dokumentation: http://docs.python.org/2/library/sys.html#sys.version
Ich bin von Kontinuum, so lassen Sie mich eine kurze Anmerkung: Du bekommst einen anderen
sys.version
string, je nachdem, ob Sie verwendet werdenconda
zu installieren, die Anaconda Python-Distribution oder einfach Python. Also vonconda create -n full_apd anaconda
Sie bekommen würde, einesys.version
Zeichenfolge wie folgt:Dies ist, was Sie erhalten, wenn Sie verwenden
miniconda
oder arbeiten von einemconda
Umgebung, wo Sie haben gerade angegebenpython
(z.B.conda create -n base_py27 python=2.7
):Wenn Sie einfach nur heruntergeladen und installiert die volle Anaconda Python-Distribution direkt, Sie erhalten die ehemaligen:
3.7.2 (default, Jan 2 2019, 17:07:39) [MSC v.1915 64 bit (AMD64)]
also ich glaube nicht, dass dieser nicht mehr arbeitet.Dies kann-Adresse: stackoverflow.com/a/47610844/1639671Für version > 3.7 die version-info hat wie folgt verändern:
Vom dieser Beitrag
Die Lösung sollte geändert werden zu:
sys.version
wie?os.path.exists(os.path.join(sys.prefix, 'conda-meta'))