Für mich, der verwirrt war, weil Sudo Python bei der Verwendung von virtualenv nicht funktionierte

Betriebsüberprüfungsumgebung

Was ist virtualenv?

Mit dieser Funktion können Sie mehrere Python-Umgebungen auf demselben Computer (OS) erstellen.

Das ist überwältigend schneller als das Erstellen von Grund auf neu, und Sie können dies mit nur wenigen Befehlen tun. Ich war überrascht, als ich es zum ersten Mal berührte, aber es ist eine sehr entwicklungsfreundliche Funktion. Können Sie Docker verwenden? </ s>

virtuelle Referenz

http://cloverrose.hateblo.jp/entry/2012/10/01/235126 http://qiita.com/H-A-L/items/5d5a2ef73be8d140bdf3 http://qiita.com/Kodaira_/items/feadfef9add468e3a85b

sudo python funktioniert nicht?

Normalerweise verwende ich Python mit Anaconda unter Windows und auch virtualenv über den Befehl conda, aber es gibt keine Kultur, unter Windows Sudo zu benötigen. Daher habe ich völlig vergessen, dass es etwas gab, das Sudo erforderte.

Zu dieser Zeit habe ich ein Server-Backend-Programm für Python namens Bottle ausprobiert.

Bis zur Flascheninstallation


$ virtualenv --no-site-packages bottle_test
$ cd bottle_test
$ pip install bottle

Dann habe ich das Beispielprogramm in start_server.py kopiert und versucht, es auszuführen.

Prüfung


$ python start_server.py
   ...(Unterlassung)...
socket.error: [Errno 13] Permission denied

Oh, es ist Sudo. Ich habe vergessen.

Laufen Sie mit Sudo


$ sudo python start_server.py
   ...(Unterlassung)...
ImportError: No module named bottle

Das? Hast du vergessen, die Flasche zu stellen? Ist das dumm

Versionsbestätigung


$ pip freeze
appdirs==1.4.3
bottle=0.12.13
packaging=16.8
pyparsing==2.2.0
six=1.10.0

Ah, das? Es ist installiert ... warum erhalte ich eine Fehlermeldung? ,,,Ah!

Ursache: Nach der Promotion ist bei sudo keine virtuelle Umgebung verfügbar

sudo wechselt vorübergehend Ihr Home-Verzeichnis in / root, und Sie haben in / root keine virtuelle Umgebung erstellt. damit. Was ich gerade erstellt habe, ist die eigene virtuelle Umgebung des angemeldeten Benutzers, nicht für root. Es war so.

Korrespondenz? Korrespondenz.

Nachdem ich nachgeforscht hatte, fand ich drei Möglichkeiten, damit umzugehen.

  1. Rufen Sie Python direkt in der virtuellen Umgebung auf
  2. Erstellen Sie mit sudo eine virtuelle Umgebung
  3. Schreiben Sie keinen Code, für den sudo erforderlich ist

Nun, ich kann 3 nicht für das verwenden, was ich diesmal versuche.

1. Rufen Sie Python direkt in der virtuellen Umgebung auf

Dies hängt stark von der Ordnerstruktur ab, als die virtuelle Umgebung erstellt wurde. Angenommen, Sie erstellen sie beispielsweise wie folgt.

Erstellen einer virtuellen Umgebung


~ $ mkdir test
~ $ cd test
~/test $ virtualenv --no-site-packages testenv
~/test $ cd testenv
~/test/testenv $ source bin/activate

In diesem Fall lautet der von der virtuellen Umgebung testv verwendete Python-Pfad "~ / test / testenv / bin / python".

Sie können dies direkt mit sudo aufrufen, um Python mit der virtuellen Umgebung testv zu starten.

Ausführungsmethode, die wie erwartet funktioniert


(testenv) $ sudo ~/test/testenv/bin/python start_server.py

2. Erstellen Sie mit sudo eine virtuelle Umgebung

Ich habe diese Methode nicht ausprobiert. Die Idee ist einfach, es scheint zu versuchen, eine virtuelle Umgebung zu erstellen, die verwendet werden kann, wenn sudo fertig ist.

Erstellen Sie virtualenv mit sudo


$ sudo virtualenv venv

In diesem Fall scheint die Paketinstallation wie folgt zu sein.

$ sudo venv/bin/pip $PACKAGE
$ sudo sh -c ". venv/bin/activate; pip install $PACKAGE"

Ausführungsreferenz von sudo + virtualenv

https://askubuntu.com/questions/234758/how-to-use-a-python-virtualenv-with-sudo http://stackoverflow.com/questions/2658902/in-my-virtualenv-i-need-to-use-sudo-for-all-commands http://emilkirkegaard.dk/en/?p=5770

abschließend

Wir haben die Fallstricke von Python Virtualenv geteilt. Ich hoffe, es wird eine Referenz für Ihr Entwicklungsleben sein! Eh, benutzt du nicht Python? Ist es Javascript main? Ich bin normalerweise C # main! </ s> Dann!

Recommended Posts