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 einem cmd von der form ['conda', '--help']. Zu Ihrer Frage: könnte man nicht überprüfen sys.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.)
InformationsquelleAutor badideas | 2014-01-22
Schreibe einen Kommentar