Ich habe dich einen Tauchartikel schreiben lassen. Vielen Dank.
Wie @shibukawa im Kommentarbereich erwähnt hat, sind virtualenv und venv fast gleich. Es gibt also zwei Möglichkeiten, pyenv oder virtualenv (venv), aber virtualenv hat sich bereits als De-facto-Standard etabliert.
Ich empfehle pyenv im Artikel, aber ich werde virtualenv verwenden. Ich bin ein leichter Python-Benutzer, daher möchte ich die Umgebung so de facto wie möglich gestalten.
Wenn Sie die Umgebungskonstruktion von Python untersuchen, finden Sie möglicherweise die im Titel genannten Werkzeugnamen. Kurz gesagt, es ist ein Tool zur Isolation der Umgebung, aber diese Tools ändern sich schnell, und Anfänger wissen nicht, was es ist. Ich habe Python selbst nicht so häufig verwendet, daher habe ich die Funktionen und die Verwendung der einzelnen Funktionen zusammengefasst.
Python kann für die vollständige Entwicklung verwendet werden, ist aber auch als Jig-Tool zur Optimierung der täglichen Aufgaben sehr nützlich. Im einleitenden Artikel wird die Verwendung dieser Tools zur Isolation der Umgebung als selbstverständlich angesehen, aber ich halte es für eine schlechte Angewohnheit, den Schwellenwert nur unnötig anzuheben. Sie benötigen diese Tools nicht, wenn Sie sie als Ihre eigenen praktischen Tools verwenden. Genießen Sie das Programmieren mit Python, anstatt durch das Erstellen einer Umgebung erschöpft zu sein.
$ lsb_release -a
...
Description: Ubuntu 16.04.1 LTS
...
% python3 --version
Python 3.5.2
% pip3 --version
pip 9.0.1 from /usr/local/lib/python3.5/dist-packages (python 3.5)
$ pip3 freeze | grep virtualenv
virtualenv==15.1.0
virtualenvwrapper==4.7.2
$ pyenv --version
pyenv 1.0.7-1-g99d1670
Es gibt sechs, daher kenne ich die Übersetzung nicht sofort, aber wie in der folgenden Liste gezeigt, gibt es zwei Sätze, sodass Sie sich vorstellen können, dass es tatsächlich drei Typen gibt.
pyenv-virtualenv
ist ein Plugin für pyenv
. Ist virtualenvwapper
ein Wrapper-Skript für virtualenv
? "pyvenv" wird auch als Umhüllung für "venv" behandelt. Bitte beachten Sie, dass einige Artikel "pyenv-virtualenv" mit "virtualenv" verwechseln können. Die Namen sind zu verwirrend, aber die beiden sind unterschiedlich.
Verwenden Sie diese Option, wenn Sie mehrere verschiedene Versionen von Python verwenden möchten. Obwohl es mehrere Versionen gibt, handelt es sich nicht um eine große Gruppe von Python 2-Serien und 3-Serien. Es ist möglich, feine Versionsunterteilungen wie 3.3 und 3.4, 3.3.0 und 3.3.1 zu verwalten.
Das Verwalten von Python für jede Version ist keine schwierige Aufgabe, da Sie es nur für jede Version separat installieren und die symbolischen Links rechtzeitig ersetzen müssen. Spezielle Tools verwalten es jedoch zentral. Ist immer noch bequem.
Mit pyenv ist es einfach, es auszuprobieren, da eine neue Version von Python veröffentlicht wurde.
Leider scheint es ab dem 1. Januar 2017 nicht mit Windows kompatibel zu sein. Es scheint, dass es so weit wie möglich mit Shell-Skripten entwickelt wurde, so dass es unwahrscheinlich ist, dass wir in Zukunft Unterstützung erwarten können.
#Eine Liste der installierbaren Versionen wird angezeigt. Nicht nur normales Python
#Python-Distributionen wie Anaconda und Jython,Ein anderer wie Pypy
#Ich bin überrascht, dass sogar die Python-Implementierung aufgelistet ist.
$ pyenv install --list
#Installieren Sie durch Angabe der Version
$ pyenv install 3.4.3
$ pyenv install 3.6.0
#Wenn Sie eine flauschige Version angeben, wird die entsprechende Version angezeigt.
#Es ist praktisch, weil es es auflistet.
$ pyenv install 3.4
python-build: definition not found: 3.4
The following versions contain '3.4' in the name:
3.3.4
3.4.0
3.4-dev
#Es scheint, dass Sie diesen Befehl nach einer Neuinstallation ausführen müssen.
#Ich denke, es wäre schön, wenn Sie es automatisch tun könnten.
$ pyenv rehash
#Angabe der global zu verwendenden Python-Version
$ pyenv global 3.4.0
$ pyenv version
Python 3.4.0
#Angabe der Python-Version, die lokal im Verzeichnis verwendet werden soll
$ cd ~/project
$ pyenv local 3.3.4
$ pyenv version
Python 3.3.4
$ cd ~
$ pyenv version
Python 3.4.0
#Angeben der Python-Version, die Shell lokal verwendet werden soll
$ pyenv global 3.4.0
$ pyenv version
Python 3.4.0
$ bash
$ pyenv shell 3.3.4
$ pyenv version
Python 3.3.4
$ exit
$ pyenv version
Python 3.4.0
ein Punkt Was die Realisierung der Funktion namens Python betrifft, die verzeichnislokal ist, wird nichts Großes getan, und die Grundidee ist sehr einfach. global Die angegebene Python-Version wird als Zeichenfolge in der Textdatei "~ / .pyenv / version" gespeichert. Wenn Sie das lokale Verzeichnis angeben, wird eine Textdatei mit dem Namen ".python-version" direkt unter dem Verzeichnis erstellt und die Versionszeichenfolge dort gespeichert. Jede Version von Python wird für jede Version in "~ / .pyenv / version" gespeichert und beim Wechseln der Version nur durch einen symbolischen Link zum entsprechenden Python ersetzt. Es ist die erste Idee, die Ihnen einfällt, wenn Sie versuchen, dasselbe selbst zu erreichen. Abgesehen davon ist es eine Verschwendung, es nur als komplette Black Box zu verwenden, da weit verbreitete Werkzeuge nicht immer spezielle Techniken verwenden.
virtualenv
und pyenv-virtualenv
sind separate Anwendungen. Bitte beachten Sie, dass einige Artikel verwirrt sein können.
pyenv-virtualenv
ist ein Plugin für pyenv
. Sie können mehrere Python-Versionen mit pyenv
installieren, aber das Verzeichnis site-packages
, das die Module für jede Python-Version verwaltet, ist üblich. Sie können "pyenv-virtualenv" verwenden, um verschiedene "Site-Pakete" in derselben Python-Version zu verwalten.
Sie können den Unterschied zwischen der Entwicklungsumgebung und der Ausführungsumgebung minimieren, indem Sie alle Versionen der Module korrigieren, die in der zu entwickelnden Anwendung verwendet werden, oder nur die minimal erforderlichen Module installieren.
# pyenv-Installation von virtualenv.
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
# .Fügen Sie xxxrc erste Einstellungen hinzu
#Warum Sie eval verwenden, optional`-`Ich habe mich gefragt, was es ist, also habe ich eine Frage mit Stapelüberlauf gestellt.
# http://ja.stackoverflow.com/questions/32043/xxxenv-Eval bei der Initialisierung von-xxxenv-init-Bedeutung von
vi ~/.bashrc
eval "$(pyenv virtualenv-init -)"
#Jeder Name, der die Python-Version und die virtuelle Umgebung in pyenv virtualenv identifiziert(tag)Angegeben.
$ pyenv virtualenv <pyversion> <tag>
#Dann die entsprechende Seite-Das Paketverzeichnis wird generiert
Requirement already satisfied: setuptools in /home/vagrant/.pyenv/versions/<pyversion>/envs/<tag>/lib/python<X.Y>/site-packages
Requirement already satisfied: pip in /home/vagrant/.pyenv/versions/<pyversion>/envs/<tag>/lib/python<X.Y>/site-packages
#Sie können die erstellte virtuelle Umgebung anhand von Versionen überprüfen.
$ pyenv versions
system
3.5.3/envs/virtual-3.5.3 # <<Die beiden sind wahrscheinlich gleich
virtual-3.5.3 # <<
#Wenn Sie den erstellten Tag-Namen im Unterbefehl "Aktivieren" angeben, wird die virtuelle Umgebung aktiviert.
$ pyenv activate <tag>
#Der Tag-Name sollte wie folgt links von der Shell-Eingabeaufforderung angezeigt werden
(<tag>)$
#Führen Sie Deaktivieren aus, um die virtuelle Umgebung zu beenden.
$ pyenv deactivate
#Sie können eine verzeichnislokale virtuelle Umgebung wie eine normale pyenv erstellen.
#Fügen Sie pyenv local zum Stammverzeichnis Ihres Anwendungsentwicklungsprojekts hinzu
#Es ist eine gute Idee, dies anzugeben.
$ pyenv local <tag>
Ich weiß nicht viel über die Geschichte von Python, aber es scheint, dass virtualenv
ursprünglich als Konstruktionswerkzeug für virtuelle Umgebungen berühmt war, und pyenv
scheint ein Neuling zu sein. Wenn Sie "virtualenv" nach der Verwendung von "pyenv" ausprobieren, ist es sicherlich weniger vertraut als "pyenv". ~~ virtualenv
kann nicht verwendet werden, um die Version von Python selbst zu wechseln ~~ (ich wurde im Kommentar darauf hingewiesen. Es scheint, dass es gewechselt werden kann), und auch in Bezug auf die Isolierung von Site-Paketen, pyenv-virtualenv
Ich hatte das Gefühl, dass es einfacher zu bedienen war. Es mag natürlich sein, weil "pyenv, pyenv-virtualenv" ein Verspäteter ist, aber es gibt ein Gefühl der Enttäuschung. Es scheint, dass es einen langen Tag für die Umgebung geben wird, wie zum Beispiel die Plug-In-Unterstützung des Editors, da dieser eine lange Geschichte hat.
Ich kann es nicht mehr zum Erstellen einer neuen Umgebung verwenden, aber ich habe vorerst alle Funktionen ausprobiert.
#Virtualenv installieren
$ sudo pip3 install virtualenv
#Erstellen Sie eine virtuelle Umgebung, indem Sie ein Verzeichnis angeben.
$ python3 -m virtualenv <dir>
#Dann wird ein solches Verzeichnis erstellt. Der Verzeichnisname lautet virtualenv
#Dies kann je nach Version variieren.
# [Bestätigungsumgebung] Ubuntu 16.04 virtualenv 15.1.0
$ cd <dir>
$ ls
bin include lib pip-selfcheck.json
#Wenn Sie das Aktivierungsskript des generierten Verzeichnisses mit dem Quellbefehl laden
#Die virtuelle Umgebung ist aktiviert.
$ source bin/activate
#Während die virtuelle Umgebung aktiv ist, wird der Stammverzeichnisname der virtuellen Umgebung auf der linken Seite der Eingabeaufforderung angezeigt.
(<dir>)$
#Deaktivieren Sie die virtuelle Umgebung mit Deaktivieren
(<dir>)% deactivate
Übrigens kann virtualenv allein nicht einfach gelöscht werden, und es werden viele Verzeichnisse für virtualenv erstellt, was eine weitere Unannehmlichkeit darstellt. Durch die Einführung von virtualenvwapper können Sie mithilfe von Dienstprogrammbefehlen virtualenv bequem verwenden, was die Verwendung etwas vereinfacht. Ich habe es unter Bezugnahme auf Verwalten der Python-Umgebung mit virtualenv installiert.
# virtualenv /Virtualenvwrapper installieren
$ sudo pip3 install virtualenv
$ sudo pip3 install virtualenvwrapper
# ~/.Fügen Sie xxxrc den Initialisierungscode hinzu
$ vim ~/.bashrc
source /usr/local/bin/virtualenvwrapper.sh
export WORKON_HOME=~/.virtualenvs
Melden wir uns erneut an und verwenden es.
/usr/bin/python: No module named virtualenvwrapper
virtualenvwrapper.sh: There was a problem running the initialization hooks.
If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly.
Oh, ich habe etwas bekommen, das wie eine Fehlermeldung aussah. Da ich es mit "pip3" installiert habe, wurde es als "Python3-Modul" installiert, aber da "/ usr / bin / python von Ubuntu 16.04" python2.7 "ist, ist" virtualenvwrapper "nicht installiert. Es scheint, dass Sie sagen. Es scheint, dass Sie den Pfad von Python3 in VIRTUALENVWRAPPER_PYTHON
angeben sollten. Wie nett es ist! Ich möchte Lehrling werden. Fügen wir die Einstellungen hinzu und melden Sie sich erneut an.
$ vim ~/.bashrc
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
Diesmal habe ich eine andere Nachricht bekommen.
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/initialize
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/get_env_details
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/postmkproject
Beim Betrachten des Inhalts handelt es sich nur um ein Shell-Skript. Es scheint, dass ein Hook-Skript vorbereitet werden kann, wenn ein Ereignis eintritt. Lass es uns jetzt ignorieren. Ich werde es vorerst normal benutzen.
#Wenn ich virtualenvwrapper ausführe, sind die verfügbaren Befehle durcheinander.
$ virtualenvwrapper
Commands available:
add2virtualenv: add directory to the import path
allvirtualenv: run a command in all virtualenvs
...
#Sie können mit mkvirtualenv eine virtuelle Umgebung erstellen.--no-site-Wenn das Paket nicht angegeben ist,
# $VIRTUALENVWRAPPER_PYTHON-Site-Es scheint die Pakete zu übernehmen. Erstellen Sie eine virtuelle Umgebung
#In Anbetracht des Zwecks ist es normalerweise--no-site-Ich denke, Sie sollten Pakete angeben.
$ mkvirtualenv --no-site-package <tag>
#Beim Erstellen wird der Umgebungsname ganz links in der Eingabeaufforderung hinzugefügt
(<tag>)$
#Der Körper der virtuellen Umgebung mit cdvirtualenv? Kann in das Verzeichnis verschieben, in dem
$ cdvirtualenv
$ pwd
/home/vagrant/.virtualenvs/<tag>
#Wenn virtualenv eine einzelne Einheit ist, lautet das Verzeichnis virtualenv, das direkt unter dem Verzeichnis der virtuellen Umgebung abgelegt wurde
# $WORKON_Es scheint unter HOME platziert zu sein. Es war ein bisschen erfrischend.
$ ls
bin include lib pip-selfcheck.json
#Sie können auch virtuelle Umgebungen löschen, die mit virtualenv allein nicht möglich sind.
$ deactivate
$ rmvirtualenv <tag>
Unterstützen wir venv
mit Funktionen wie virtualenv
als Standard! Es scheint also ein Standardmodul zu sein, das aus Python 3.3 hinzugefügt wurde. Es gibt keinen Befehl namens "venv". Geben Sie also das Modul aus "python" an und verwenden Sie es.
Als ich Pyvenv erforschte, fand ich einen solchen Artikel.
Pyvenv ist veraltet, sprechen Sie also über die Verwendung von venv
Ich habe mich auch gefragt, ob es so etwas wie "pyenv" und "virtualenv" ist ... aber es war einfacher. Zusammenfassend ist "pyvenv" wie der Syntaxzucker von "venv", nicht ganz anders als "pyenv" und "virtualenv".
#Wie man venv anruft
$ python3 -m venv <options>
#Ubuntu 16 ist die Standardbibliothek für Python.In 04 wird es im folgenden Verzeichnis installiert.
$ cd /usr/lib/python3.5
$ find `pwd` -name "*venv*"
/usr/lib/python3.5/venv
# 2.7 scheint kein venv zu haben.
$ cd /usr/lib/python2.7
$ find `pwd` -name "*venv*"
pyvenv kann unter Ubuntu 16.04 verwendet werden, indem die folgenden Pakete installiert werden.
$ sudo apt-get install -y python3-venv
#Wenn Sie mit dpkg überprüfen/usr/bin/pyenv sieht aus wie der Hauptkörper.
% dpkg -L python3-venv
/.
/usr
/usr/share
/usr/share/doc
/usr/share/man
/usr/share/man/man1
/usr/bin
/usr/share/doc/python3-venv
/usr/share/man/man1/pyvenv.1.gz
/usr/bin/pyvenv
Wenn man sich den Inhalt ansieht, nennt man das wirklich nur "venv". Es ist ein Rätsel, warum ich mich dazu entschlossen habe.
Der Grund, warum pyvenv
veraltet ist, ist, dass, wie Sie im Referenzlink sehen können, die Python-Version klar ist und nicht durchlaufen wird, wenn Sie es explizit als Python-Modul mit python -m
aufrufen! Es scheint, dass. Das merkt man von Anfang an! Ich möchte sagen ... Von nun an werden wir mit python -m venv
erklären, ohne pyven v
zu verwenden.
# /usr/bin/pyvenv
#! /usr/bin/python3.5
if __name__ == '__main__':
import sys
rc = 1
try:
import venv
venv.main()
rc = 0
except Exception as e:
print('Error: %s' % e, file=sys.stderr)
sys.exit(rc)
#Zeig Hilfe
$ python3 -m venv -h
#Erstellen einer virtuellen Umgebung
$ python3 -m venv <dir>
#Irgendwie wurde ein Verzeichnis erstellt. Es ist die gleiche Konfiguration wie virtualenv.
$ cd <dir>
$ ls
bin include lib lib64 pyvenv.cfg share
#Die Verwendung ist die gleiche wie bei virtualenv.
$ source bin/activate
(dir)$
$ deactivate
$
Es gibt nur einen Standard und es ist ganz einfach. Ich bin froh, dass es Standard ist, aber ich hatte das Gefühl, dass es für den Betrieb in vollem Umfang nicht ausreicht, da es nur verwendet werden kann oder unzureichende Funktionen hat, wenn es nicht 3.3 oder höher ist.
Ab Januar 2017 ist die Kombination von "pyenv" und "pyenv-virtualenv" wahrscheinlich die bequemste. Es ist schade, dass Windows nicht unterstützt wird, aber es scheint besser, Linux auf einer virtuellen Maschine für die vollständige Entwicklung zu verwenden.
Da "virtualenv" unter Windows verwendet werden kann, scheint es, dass es zum Erstellen einer sauberen Umgebung verwendet werden kann, wenn Sie den Betrieb des Verteilungsmoduls überprüfen möchten. Sie können venv
verwenden, aber es tut weh, dass Sie es nicht mit Python 2.7 verwenden können.
Ich denke, der einfachste Weg, Python als Jig-Tool zu verwenden, besteht darin, auf die Informationen auf dieser Site zu verweisen.
pyenv, pyenv-virtualenv
virtualenv, virtualenvwapper
pyvenv, venv
Recommended Posts