Verwalten mehrerer Python-Versionen mit pyenv

Verwalten mehrerer Python-Versionen mit pyenv

Wollten Sie schon immer zu einem Projekt beitragen, das mehrere Versionen von Python unterstützt, sind sich aber nicht sicher, wie Sie alle Versionen einfachtest können? Sind Sie jemals neugierig auf die neuesten und besten Versionen von Python? Vielleicht möchten Sie diese neuen Funktionen ausprobieren, möchten sich aber keine Sorgen machen, dass Ihre Entwicklungsumgebung durcheinander gebracht wird. Glücklicherweise muss die Verwaltung mehrerer Python-Versionen nicht verwirrend sein, wenn Siepyenv verwenden.

Dieser Artikel bietet Ihnen einen umfassenden Überblick darüber, wie Sie Ihre Zeit für die Arbeit an Projekten maximieren und den Zeitaufwand für Kopfschmerzen bei der Verwendung der richtigen Version von Python minimieren können.

In diesem Artikel erfahren Sie, wie Sie:

  1. Installieren Sie mehrere Versionen von Python

  2. Installieren Sie die neueste Entwicklungsversion von Python

  3. Wechseln Sie zwischen den installierten Versionen

  4. Verwenden Sie virtuelle Umgebungen mitpyenv

  5. Aktivieren Sie verschiedene Python-Versionen und virtuelle Umgebungen automatisch

Free Bonus:Click here to get access to a chapter from Python Tricks: The Book zeigt Ihnen die Best Practices von Python anhand einfacher Beispiele, die Sie sofort anwenden können, um schöneren + Pythonic-Code zu schreiben.

Warumpyenv verwenden?

pyenv ist ein wunderbares Tool zum Verwalten mehrerer Python-Versionen. Selbst wenn Sie Python bereits auf Ihrem System installiert haben, lohnt es sich,pyenv zu installieren, damit Sie problemlos neue Sprachfunktionen ausprobieren oder einen Beitrag zu einem Projekt leisten können, das sich auf einer anderen Version von Python befindet.

Warum nicht System Python verwenden?

"System Python" ist das Python, das auf Ihrem Betriebssystem installiert ist. Wenn Sie unter Mac oder Linux arbeiten, erhalten Sie standardmäßig, wenn Siepython in Ihr Terminal eingeben, eine schöne Python-REPL.

Warum also nicht benutzen? Eine Möglichkeit, es zu betrachten, ist, dass dieser Python wirklichbelongsfür das Betriebssystem ist. Immerhin wurde es mit dem Betriebssystem installiert. Dies spiegelt sich sogar wider, wenn Siewhich ausführen:

$ which python
/usr/bin/python

Hier stehtpython allen Benutzern zur Verfügung, was durch den Standort/usr/bin/python belegt wird. Möglicherweise ist dies auch nicht die gewünschte Version von Python:

$ python -V
Pyhton 2.7.12

Um ein Paket in Ihrem System Python zu installieren, müssen Siesudo pip install ausführen. Dies liegt daran, dass Sie das Python-Paket global installieren. Dies ist ein echtes Problem, wenn ein anderer Benutzer vorbeikommt und eine etwas ältere Version des Pakets installieren möchte.

Probleme mit mehreren Versionen desselben Pakets schleichen sich häufig in Sie ein und beißen Sie, wenn Sie es am wenigsten erwarten. Ein häufiger Weg, auf dem sich dieses Problem darstellt, ist ein beliebtes und stabiles Paket, das sich auf Ihrem System plötzlich schlecht verhält. Nach stundenlanger Fehlerbehebung und Googeln stellen Sie möglicherweise fest, dass Sie die falsche Version einer Abhängigkeit installiert haben, was Ihren Tag ruiniert.

Selbst wenn Ihre Python-Version in/usr/local/bin/python3 installiert ist, sind Sie immer noch nicht sicher. Sie werden auf dieselben Berechtigungs- und Flexibilitätsprobleme stoßen, die oben beschrieben wurden.

Außerdem haben Sie nicht wirklich viel Kontrolle darüber, welche Version von Python auf Ihrem Betriebssystem installiert ist. Wenn Sie die neuesten Funktionen in Python verwenden möchten und beispielsweise Ubuntu verwenden, haben Sie möglicherweise kein Glück. Die Standardversionen sind möglicherweise zu alt, was bedeutet, dass Sie nur warten müssen, bis ein neues Betriebssystem herauskommt.

Schließlich verwenden einige Betriebssysteme tatsächlich das gepackte Python für den Betrieb. Nehmen wir zum Beispielyum, das Python stark nutzt, um seine Arbeit zu erledigen. Wenn Sie eine neue Version von Python installieren und nicht darauf achten, sie in Ihrem Benutzerbereich zu installieren, können Sie Ihre Fähigkeit zur Verwendung Ihres Betriebssystems ernsthaft beeinträchtigen.

Was ist mit einem Paketmanager?

Der nächste logische Ort sind Paketmanager. Programme wieapt,yum,brew oderport sind typische nächste Optionen. Schließlich installieren Sie auf diese Weise die meisten Pakete auf Ihrem System. Leider treten bei Verwendung eines Paketmanagers einige der gleichen Probleme auf.

Standardmäßig installieren Paketmanager ihre Pakete eher im globalen Systembereich als im Benutzerbereich. Wiederum verschmutzen diese Pakete auf Systemebene Ihre Entwicklungsumgebung und machen es schwierig, einen Arbeitsbereich mit anderen zu teilen.

Auch hier haben Sie immer noch keine Kontrolle darüber, welche Version von Python Sie installieren können. Es stimmt, dass einige Repositorys Ihnen eine größere Auswahl bieten, aber standardmäßig sehen Sie sich an, welche Version von Python Ihr bestimmter Anbieter an einem bestimmten Tag verwendet.

Selbst wenn Sie Python über einen Paketmanager installieren, sollten Sie überlegen, was passieren würde, wenn Sie ein Paket schreiben und Python 3.4 - 3.7 unterstützen und testen möchten.

Was würde auf Ihrem System passieren, wenn Siepython3 eingeben? Wie würden Sie schnell zwischen den verschiedenen Versionen wechseln? Sie können es sicherlich tun, aber es ist langweilig und fehleranfällig. Bedenken Sie jedoch, dass Sie mit Ihrem Paketmanager wahrscheinlich kein Glück haben, wenn Sie PyPy, Jython oder Miniconda möchten.

Lassen Sie uns unter Berücksichtigung dieser Einschränkungen die Kriterien zusammenfassen, mit denen Sie Python-Versionen einfach und flexibel installieren und verwalten können:

  1. Installieren Sie Python in Ihrem Benutzerbereich

  2. Installieren Sie mehrere Versionen von Python

  3. Geben Sie die genaue Python-Version an, die Sie möchten

  4. Wechseln Sie zwischen den installierten Versionen

Mitpyenv können Sie all diese Dinge und mehr tun.

pyenv installieren

Bevor Siepyenv selbst installieren, benötigen Sie einige betriebssystemspezifische Abhängigkeiten. Diese Abhängigkeiten sind meistens in C geschriebene Entwicklungsdienstprogramme und werden benötigt, dapyenv Python durch Erstellen aus dem Quellcode installiert. Eine detailliertere Aufschlüsselung und Erläuterung der Build-Abhängigkeiten finden Sie inofficial docs. In diesem Tutorial werden die gängigsten Methoden zum Installieren dieser Abhängigkeiten beschrieben.

Note:pyenv unterstützte Windows ursprünglich nicht. Es scheint jedoch eine grundlegende Unterstützung für daspyenv-win-Projekt zu geben, das kürzlich aktiv wurde. Wenn Sie Windows verwenden, können Sie es gerne ausprobieren.

Abhängigkeiten erstellen

pyenv erstellt Python aus dem Quellcode. Dies bedeutet, dass Sie Build-Abhängigkeiten benötigen, umpyenv tatsächlich zu verwenden. Die Build-Abhängigkeiten variieren je nach Plattform. Wenn Sie aufUbuntu/Debian sind und die Build-Abhängigkeiten installieren möchten, können Sie Folgendes verwenden:

$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl

Dies verwendetApt, um alle Build-Abhängigkeiten zu installieren. Lassen Sie dies laufen und Sie sind bereit für Debian-Systeme.

Wenn SieFedora/CentOS/RHEL verwenden, können Sieyum verwenden, um Ihre Build-Abhängigkeiten zu installieren:

$ sudo yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite \
sqlite-devel openssl-devel xz xz-devel libffi-devel

Dieser Befehl installiert alle Build-Abhängigkeiten für Python mityum.

macOS Benutzer können den folgenden Befehl verwenden:

$ brew install openssl readline sqlite3 xz zlib

Dieser Befehl basiert aufHomebrew und installiert die wenigen Abhängigkeiten für MacOS-Benutzer.

Tip: Wenn Sie Mojave oder höher (10.14+) ausführen, müssen Sie auchadditional SDK headers installieren:

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

Vielen Dank an Rodrigo Viera für das Update.

Wenn Sie stattdessenopenSUSE verwenden, führen Sie Folgendes aus:

$ zypper in zlib-devel bzip2 libbz2-devel libffi-devel \
libopenssl-devel readline-devel sqlite3 sqlite3-devel xz xz-devel

Dieser Befehl installiert erneut alle Python-Build-Abhängigkeiten für Ihr System.

Schließlich können Sie fürAlpine Benutzer Folgendes verwenden:

$ apk add libffi-dev ncurses-dev openssl-dev readline-dev \
tk-dev xz-dev zlib-dev

Dieser Befehl verwendetapk als Paketmanager und installiert alle Build-Abhängigkeiten für Python on Alpine.

Verwenden des pyenv-Installationsprogramms

Nachdem Sie die Build-Abhängigkeiten installiert haben, können Siepyenv selbst installieren. Ich empfehle die Verwendung vonpyenv-installer project:

$ curl https://pyenv.run | bash

Dadurch werdenpyenv zusammen mit einigen nützlichen Plugins installiert:

  1. pyenv: Die tatsächlichepyenv-Anwendung

  2. pyenv-virtualenv: Plugin fürpyenv und virtuelle Umgebungen

  3. pyenv-update: Plugin zum Aktualisieren vonpyenv

  4. pyenv-doctor: Plugin, um zu überprüfen, obpyenv und Build-Abhängigkeiten installiert sind

  5. pyenv-which-ext: Plugin zum automatischen Nachschlagen von Systembefehlen

Note: Der obige Befehl entspricht dem Herunterladen und lokalen Ausführen vonpyenv-installer script. Wenn Sie also genau sehen möchten, was Sie gerade ausführen, können Sie die Datei selbst anzeigen. Wenn Sie wirklich kein Skript ausführen möchten, können Sie alternativ diemanual installation instructions. auschecken

Am Ende des Laufs sollten Sie ungefähr Folgendes sehen:

WARNING: seems you still have not added 'pyenv' to the load path.

# Load pyenv automatically by adding
# the following to ~/.bashrc:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Die Ausgabe basiert auf Ihrer Shell. Sie sollten jedoch den Anweisungen folgen, umpyenv zu Ihrem Pfad hinzuzufügen und die automatische Vervollständigung vonpyenv /pyenv-virtualenv zu initialisieren. Sobald Sie dies getan haben, müssen Sie Ihre Shell neu laden:

$ exec "$SHELL" # Or just restart your terminal

Das ist es. Sie haben jetztpyenv und vier nützliche Plugins installiert.

Verwenden vonpyenv zum Installieren von Python

Nachdem Siepyenv installiert haben, ist die Installation von Python der nächste Schritt. Sie haben viele Versionen von Python zur Auswahl. Wenn Sie alle verfügbaren CPython 3.6 bis 3.8 anzeigen möchten, können Sie Folgendes tun:

$ pyenv install --list | grep " 3\.[678]"
  3.6.0
  3.6-dev
  3.6.1
  3.6.2
  3.6.3
  3.6.4
  3.6.5
  3.6.6
  3.6.7
  3.6.8
  3.7.0
  3.7-dev
  3.7.1
  3.7.2
  3.8-dev

Das Obige zeigt alle Python-Versionen, von denenpyenvweiß, dass sie mit dem regulären Ausdruck übereinstimmen. In diesem Fall sind dies alle verfügbaren CPython-Versionen 3.6 bis 3.8. Wenn Sie alle Jython-Versionen anzeigen möchten, können Sie Folgendes tun:

$ pyenv install --list | grep "jython"
  jython-dev
  jython-2.5.0
  jython-2.5-dev
  jython-2.5.1
  jython-2.5.2
  jython-2.5.3
  jython-2.5.4-rc1
  jython-2.7.0
  jython-2.7.1

Auch hier können Sie alle Jython-Versionen sehen, diepyenv zu bieten hat. Wenn Sie alle Versionen anzeigen möchten, können Sie Folgendes tun:

$ pyenv install --list
...
# There are a lot

Sobald Sie die gewünschte Version gefunden haben, können Sie sie mit einem einzigen Befehl installieren:

$ pyenv install -v 3.7.2
/tmp/python-build.20190208022403.30568 ~
Downloading Python-3.7.2.tar.xz...
-> https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
Installing Python-3.7.2...
/tmp/python-build.20190208022403.30568/Python-3.7.2 /tmp/python-build.20190208022403.30568 ~
[...]
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2
Installed Python-3.7.2 to /home/realpython/.pyenv/versions/3.7.2

Having Problems? Daspyenv documentation enthält großartige Installationshinweise sowie nützlicheFAQ zusammen mitcommon build problems.

Dies wird eine Weile dauern, dapyenv Python aus dem Quellcode erstellt. Sobald dies erledigt ist, steht Python 3.7.2 auf Ihrem lokalen Computer zur Verfügung. Wenn Sie nicht alle Ausgaben sehen möchten, entfernen Sie einfach das-v-Flag. Sogar Entwicklungsversionen von CPython können installiert werden:

$ pyenv install 3.8-dev

Pro Tip: Wenn Siepyenv für eine Weile verwendet haben und die gesuchte Version nicht sehen, müssen Sie möglicherweisepyenv update ausführen, um das Tool zu aktualisieren und sich zu vergewissern Zugriff auf die neuesten Versionen haben.

Für den Rest des Tutorials wird in den Beispielen davon ausgegangen, dass Sie3.6.8 und2.7.15 installiert haben. Sie können diese Werte jedoch durch die tatsächlich installierten Python-Versionen ersetzen. Beachten Sie auch, dass die System-Python-Version in den Beispielen2.7.12 ist.

Installationsort

Wie bereits erwähnt, erstelltpyenv Python aus dem Quellcode. Jede von Ihnen installierte Version befindet sich im Stammverzeichnis Ihrespyenv:

$ ls ~/.pyenv/versions/
2.7.15  3.6.8  3.8-dev

Alle Ihre Versionen finden Sie hier. Dies ist praktisch, da das Entfernen dieser Versionen trivial ist:

$ rm -rf ~/.pyenv/versions/2.7.15

Natürlich bietetpyenv auch einen Befehl zum Deinstallieren einer bestimmten Python-Version:

$ pyenv uninstall 2.7.15

Verwenden Ihres neuen Python

Nachdem Sie einige verschiedene Python-Versionen installiert haben, sehen wir uns einige Grundlagen zu deren Verwendung an. Überprüfen Sie zunächst, welche Python-Versionen verfügbar sind:

$ pyenv versions
* system (set by /home/realpython/.pyenv/version)
  2.7.15
  3.6.8
  3.8-dev

* gibt an, dass die Python-Version vonsystem derzeit aktiv ist. Sie werden auch feststellen, dass dies durch eine Datei im Stammverzeichnis vonpyenvfestgelegt wird. Dies bedeutet, dass Sie standardmäßig immer noch Ihr System Python verwenden:

$ python -V
Python 2.7.12

Wenn Sie versuchen, dies mitwhich zu bestätigen, wird Folgendes angezeigt:

$ which python
/home/realpython/.pyenv/shims/python

Das mag überraschen, aber so funktioniertpyenv. pyenv fügt sich inPATH ein und aus Sicht Ihres Betriebssystemsis die ausführbare Datei, die aufgerufen wird. Wenn Sie den tatsächlichen Pfad anzeigen möchten, können Sie Folgendes ausführen:

$ pyenv which python
/usr/bin/python

Wenn Sie beispielsweise Version 2.7.15 verwenden möchten, können Sie den Befehlglobal verwenden:

$ pyenv global 2.7.15
$ python -V
Python 2.7.15

$ pyenv versions
  system
* 2.7.15 (set by /home/realpython/.pyenv/version)
  3.6.8
  3.8-dev

Pro Tip: Eine gute Möglichkeit, um sicherzugehen, dass die gerade installierte Python-Version ordnungsgemäß funktioniert, besteht darin, die integrierte Testsuite auszuführen:

$ pyenv global 3.8-dev
$ python -m test

Dadurch werden viele interne Python-Tests gestartet, mit denen Ihre Installation überprüft wird. Sie können sich einfach zurücklehnen und zusehen, wie die Tests bestanden werden.

Wenn Sie jemals standardmäßig zur Systemversion von Python zurückkehren möchten, können Sie Folgendes ausführen:

$ pyenv global system
$ python -V
Python 2.7.12

Sie können jetzt problemlos zwischen verschiedenen Python-Versionen wechseln. Dies ist nur der Anfang. Wenn Sie viele Versionen haben, zwischen denen Sie wechseln möchten, ist es mühsam, diese Befehle konsistent einzugeben. In diesem Abschnitt werden die Grundlagen erläutert. Ein besserer Workflow wird jedoch inworking with multiple environments. beschrieben

Erkunden vonpyenv Befehlen

pyenv bietet viele Befehle. Sie können eine vollständige Liste aller verfügbaren Befehle damit sehen:

$ pyenv commands
activate
commands
completions
deactivate
...
virtualenvs
whence
which

Dies gibt alle Befehlsnamen aus. Jeder Befehl hat ein--help-Flag, das Ihnen detailliertere Informationen liefert. Wenn Sie beispielsweise weitere Informationen zum Befehlshims anzeigen möchten, können Sie Folgendes ausführen:

$ pyenv shims --help
Usage: pyenv shims [--short]

List existing pyenv shims

In der Hilfemeldung wird beschrieben, wofür der Befehl verwendet wird und welche Optionen Sie in Verbindung mit dem Befehl verwenden können. In den folgenden Abschnitten finden Sie eine schnelle Übersicht über die am häufigsten verwendeten Befehle.

install

Sie haben den Befehlinstalloben bereits gesehen. Mit diesem Befehl können Sie eine bestimmte Version von Python installieren. Wenn Sie beispielsweise3.6.8 installieren möchten, verwenden Sie Folgendes:

$ pyenv install 3.6.8

Die Ausgabe zeigt uns, wiepyenvPython herunterlädt und installiert. Einige der häufigsten Flags, die Sie möglicherweise verwenden möchten, sind die folgenden:

Flag Beschreibung

-l/--list

Listet alle verfügbaren Python-Versionen für die Installation auf

-g/--debug

Erstellt eine Debug-Version von Python

-v/--verbose

Ausführlicher Modus: Drucken Sie den Kompilierungsstatus auf stdout

versions

Der Befehlversions zeigt alle derzeit installierten Python-Versionen an:

$ pyenv versions
* system (set by /home/realpython/.pyenv/version)
  2.7.15
  3.6.8
  3.8-dev

Diese Ausgabe zeigt nicht nur, dass2.7.15,3.6.8,3.8-dev und Ihrsystem Python installiert sind, sondern auch, dass dersystem Python aktiv ist. Wenn Sie sich nur für die aktuell aktive Version interessieren, können Sie den folgenden Befehl verwenden:

$ pyenv version
system (set by /home/realpython/.pyenv/version)

Dieser Befehl ähneltversions, zeigt jedoch nur die aktuell aktive Python-Version an.

which

Der Befehlwhich ist hilfreich, um den vollständigen Pfad zu einer ausführbaren Systemdatei zu ermitteln. Dapyenv mithilfe von Shims funktioniert, können Sie mit diesem Befehl den vollständigen Pfad zur ausführbaren Datei anzeigen, in derpyenv ausgeführt wird. Wenn Sie beispielsweise sehen möchten, wopip installiert ist, können Sie Folgendes ausführen:

$ pyenv which pip
/home/realpython/.pyenv/versions/3.6.8/bin/pip

Die Ausgabe zeigt den vollständigen Systempfad fürpip an. Dies kann hilfreich sein, wenn Sie Befehlszeilenanwendungen installiert haben.

global

Der Befehlglobal legt die globale Python-Version fest. Dies kann mit anderen Befehlen überschrieben werden, ist jedoch hilfreich, um sicherzustellen, dass Sie standardmäßig eine bestimmte Python-Version verwenden. Wenn Sie standardmäßig3.6.8 verwenden möchten, können Sie Folgendes ausführen:

$ pyenv global 3.6.8

Dieser Befehl setzt~/.pyenv/version auf3.6.8. Weitere Informationen finden Sie im Abschnitt zuspecifying your Python version.

local

Der Befehllocal wird häufig verwendet, um eine anwendungsspezifische Python-Version festzulegen. Sie können es verwenden, um die Version auf2.7.15 zu setzen:

$ pyenv local 2.7.15

Dieser Befehl erstellt eine.python-version-Datei in Ihrem aktuellen Verzeichnis. Wenn in Ihrer Umgebungpyenv aktiv sind, aktiviert diese Datei diese Version automatisch für Sie.

shell

Mit dem Befehlshell wird eine Shell-spezifische Python-Version festgelegt. Wenn Sie beispielsweise die3.8-dev-Version von Python testen möchten, können Sie Folgendes tun:

$ pyenv shell 3.8-dev

Dieser Befehl aktiviert die angegebene Version, indem die UmgebungsvariablePYENV_VERSIONfestgelegt wird. Dieser Befehl überschreibt alle Anwendungen oder globalen Einstellungen, die Sie möglicherweise haben. Wenn Sie die Version deaktivieren möchten, können Sie das Flag--unsetverwenden.

Angeben Ihrer Python-Version

Einer der verwirrenderen Teile vonpyenv ist, wie genau der Befehlpython aufgelöst wird und mit welchen Befehlen er geändert werden kann. Wie in den Befehlen erwähnt, gibt es drei Möglichkeiten, um zu ändern, welche Version vonpythonie verwenden. Wie interagieren all diese Befehle miteinander? Die Auflösungsreihenfolge sieht ungefähr so ​​aus:

Pyenv pyramid for order of resolution

Diese Pyramide soll von oben nach unten gelesen werden. Die erste dieser Optionen, diepyenv finden kann, ist die Option, die verwendet wird. Sehen wir uns ein kurzes Beispiel an:

$ pyenv versions
* system (set by /home/realpython/.pyenv/version)
  2.7.15
  3.6.8
  3.8-dev

Hier wird Ihrsystem Python verwendet, wie durch* angegeben. Um die nächstgrößere globale Einstellung vorzunehmen, verwenden Sieglobal:

$ pyenv global 3.6.8
$ pyenv versions
  system
  2.7.15
* 3.6.8 (set by /home/realpython/.pyenv/version)
  3.8-dev

Sie können sehen, dasspyenv jetzt3.6.8 als unsere Python-Version verwenden möchte. Es zeigt sogar den Speicherort der gefundenen Datei an. Diese Datei existiert tatsächlich und Sie können ihren Inhalt auflisten:

$ cat ~/.pyenv/version
3.6.8

Erstellen wir nun eine.python-version-Datei mitlocal:

$ pyenv local 2.7.15
$ pyenv versions
  system
* 2.7.15 (set by /home/realpython/.python-version)
  3.6.8
  3.8-dev
$ ls -a
.  ..  .python-version
$ cat .python-version
2.7.15

Auch hier gibtpyenv an, wie unser Befehlpython aufgelöst werden soll. Diesmal kommt es von~/.python-version. Beachten Sie, dass die Suche nach.python-version rekursiv ist:

$ mkdir subdirectory
$ cd subdirectory
$ ls -la # Notice no .python-version file
. ..
$ pyenv versions
  system
* 2.7.15 (set by /home/realpython/.python-version)
  3.6.8
  3.8-dev

Auch wennsubdirectory kein.python-version enthält, ist die Version immer noch auf2.7.15 festgelegt, da.python-version in einem übergeordneten Verzeichnis vorhanden ist.

Schließlich können Sie die Python-Version mitshell einstellen:

$ pyenv shell 3.8-dev
$ pyenv versions
  system
  2.7.15
  3.6.8
* 3.8-dev (set by PYENV_VERSION environment variable)

Dazu wurde lediglich die Umgebungsvariable$PYENV_VERSIONfestgelegt:

$ echo $PYENV_VERSION
3.8-dev

Wenn Sie sich von den Optionen überwältigt fühlen, wird im Abschnitt zuworking with multiple environments ein Prozess zur Verwaltung dieser Dateien beschrieben, bei dem hauptsächlichlocal verwendet werden.

Virtuelle Umgebungen undpyenv

Virtuelle Umgebungen spielen eine große Rolle bei der Verwaltung von Python-Installationen und -Anwendungen. Wenn Sie noch nie von virtuellen Umgebungen gehört haben, können SiePython Virtual Environments: A Primer auschecken.

Virtuelle Umgebungen undpyenv sind ein Spiel im Himmel. pyenv hat ein wundervolles Plugin namenspyenv-virtualenv, das das Arbeiten mit mehreren Python-Versionenand mehreren virtuellen Umgebungen zum Kinderspiel macht. Wenn Sie sich fragen, was der Unterschied zwischenpyenv,pyenv-virtualenv und Tools wievirtualenv odervenv ist, machen Sie sich keine Sorgen. Du bist nicht allein.

Folgendes müssen Sie wissen:

  • pyenv verwaltet mehrere Versionen von Python selbst.

  • virtualenv/venv verwaltet virtuelle Umgebungen für eine bestimmte Python-Version.

  • pyenv-virtualenv verwaltet virtuelle Umgebungen für verschiedene Versionen von Python.

Wenn Sie ein eingefleischter Benutzer vonvirtualenv odervenvind, machen Sie sich keine Sorgen:pyenv spielt gut mit beiden. Tatsächlich können Sie den gleichen Workflow beibehalten, den Sie hatten, wenn Sie dies bevorzugen. Ich denke jedoch, dasspyenv-virtualenv eine angenehmere Erfahrung bietet, wenn Sie zwischen mehreren Umgebungen wechseln, für die unterschiedliche Python-Versionen erforderlich sind.

Die gute Nachricht ist, dass Siepyenv bereits installiert und einsatzbereit haben, da Sie das Skriptpyenv-installer zum Installieren vonpyenv verwendet haben.

Virtuelle Umgebungen erstellen

Das Erstellen einer virtuellen Umgebung ist ein einzelner Befehl:

$ pyenv virtualenv  

Technisch gesehen ist<python_version> optional. Sie sollten es jedoch immer angeben, damit Sie sicher sind, welche Python-Version Sie verwenden.

Das<environment_name> ist nur ein Name für Sie, um Ihre Umgebungen getrennt zu halten. Es empfiehlt sich, Ihre Umgebungen mit demselben Namen wie Ihr Projekt zu benennen. Wenn Sie beispielsweise anmyproject arbeiten und gegen Python 3.6.8 entwickeln möchten, führen Sie Folgendes aus:

$ pyenv virtualenv 3.6.8 myproject

Die Ausgabe enthält Nachrichten, die zeigen, dass einige zusätzliche Python-Pakete installiert werden, nämlichwheel,pip undsetuptools. Dies dient ausschließlich der Bequemlichkeit und richtet lediglich eine Umgebung mit allen Funktionen für jede Ihrer virtuellen Umgebungen ein.

Aktivieren Sie Ihre Versionen

Nachdem Sie Ihre virtuelle Umgebung erstellt haben, ist deren Verwendung der nächste Schritt. Normalerweise sollten Sie Ihre Umgebungen aktivieren, indem Sie Folgendes ausführen:

$ pyenv local myproject

Sie haben den Befehlpyenv localchon einmal gesehen, aber dieses Mal geben Sie anstelle einer Python-Version eine Umgebung an. Dadurch wird eine.python-version-Datei in Ihrem aktuellen Arbeitsverzeichnis erstellt. Da Sieeval "$(pyenv virtualenv-init -)" in Ihrer Umgebung ausgeführt haben, wird die Umgebung automatisch aktiviert.

Sie können dies überprüfen, indem Sie Folgendes ausführen:

$ pyenv which python
/home/realpython/.pyenv/versions/myproject/bin/python

Sie können sehen, dass eine neue Version mit dem Namenmyproject erstellt wurde und die ausführbare Datei vonpythonauf diese Version verweist. Wenn Sie sich eine ausführbare Datei ansehen, die diese Umgebung bereitstellt, sehen Sie dasselbe. Nehmen Sie zum Beispielpip:

$ pyenv which pip
/home/realpython/.pyenv/versions/myproject/bin/pip

Wenn Sieeval "$(pyenv virtualenv-init -)" nicht für die Ausführung in Ihrer Shell konfiguriert haben, können Sie Ihre Python-Versionen folgendermaßen manuell aktivieren / deaktivieren:

$ pyenv activate 
$ pyenv deactivate

Das Obige ist, waspyenv-virtualenv tut, wenn es ein Verzeichnis mit einer.python-version-Datei betritt oder verlässt.

Arbeiten mit mehreren Umgebungen

Wenn Sie alles zusammenstellen, was Sie gelernt haben, können Sie effektiv mit mehreren Umgebungen arbeiten. Nehmen wir an, Sie haben die folgenden Versionen installiert:

$ pyenv versions
* system (set by /home/realpython/.pyenv/version)
  2.7.15
  3.6.8
  3.8-dev

Jetzt möchten Sie an zwei verschiedenen, treffend benannten Projekten arbeiten:

  1. project1 unterstützt Python 2.7 und 3.6.

  2. project2 unterstützt Python 3.6 und experimentiert mit 3.8-dev.

Sie können sehen, dass Sie standardmäßig das System Python verwenden, das durch* in der Ausgabe vonpyenv versions angegeben wird. Erstellen Sie zunächst eine virtuelle Umgebung für das erste Projekt:

$ cd project1/
$ pyenv which python
/usr/bin/python
$ pyenv virtualenv 3.6.8 project1
...
$ pyenv local project1
$ python -V
/home/realpython/.pyenv/versions/project1/bin/python

Beachten Sie schließlich, dass Sie, wenn Siecdaußerhalb des Verzeichnisses sind, standardmäßig zum System Python zurückkehren:

$ cd $HOME
$ pyenv which python
/usr/bin/python

Sie können die obigen Schritte ausführen und eine virtuelle Umgebung für project2 erstellen:

$ cd project2/
$ pyenv which python
/usr/bin/python
$ pyenv virtualenv 3.8-dev project2
...
$ pyenv local 3.8-dev
$ pyenv which python
/home/realpython/.pyenv/versions/3.8-dev/bin/python

Dies sind einmalige Schritte für Ihre Projekte. Wenn Sie nuncdzwischen den Projekten wechseln, werden Ihre Umgebungen automatisch aktiviert:

$ cd project2/
$ python -V
Python 3.8.0a0
$ cd ../project1
$ python -V
Python 3.6.8

Sie müssen sich nicht mehr daran erinnern, Umgebungen zu aktivieren: Sie können zwischen all Ihren Projekten wechseln, undpyenv sorgt dafür, dass automatisch die richtigen Python-Versionen aktiviert werden.and die richtigen virtuellen Umgebungen.

Mehrere Versionen gleichzeitig aktivieren

Wie im obigen Beispiel beschrieben, verwendetproject2 experimentelle Merkmale in 3.8. Angenommen, Sie möchten sicherstellen, dass Ihr Code unter Python 3.6 weiterhin funktioniert. Wenn Sie versuchen,python3.6 auszuführen, erhalten Sie Folgendes:

$ cd project2/
$ python3.6 -V
pyenv: python3.6: command not found

The `python3.6' command exists in these Python versions:
  3.6.8
  3.6.8/envs/project1
  project1

pyenv informiert Sie darüber, dass Python 3.6 in der aktuell aktiven Umgebung zwar nicht verfügbar ist, in anderen Umgebungen jedoch. pyenv bietet Ihnen die Möglichkeit, mehrere Umgebungen gleichzeitig mit einem vertrauten Befehl zu aktivieren:

$ pyenv local project2 3.6.8

Dies zeigtpyenv an, dass Sie die virtuelle Umgebungproject2 als erste Option verwenden möchten. Wenn also ein Befehl, z. B.python, in beiden Umgebungen aufgelöst werden kann, wählt erproject2 vor3.6.8 aus. Mal sehen, was passiert, wenn Sie Folgendes ausführen:

$ python3.6 -V
Python 3.6.8

Hier versuchtpyenv, den Befehlpython3.6 zu finden, und da er in einer aktiven Umgebung gefunden wird, kann der Befehl ausgeführt werden. Dies ist äußerst nützlich für Tools wietox, für deren Ausführung mehrere Python-Versionen auf IhrenPATH verfügbar sein müssen.

Pro Tip: Wenn Sie tox undpyenv verwenden, sollten Sie das Pakettox-pyenv auschecken.

Angenommen, Sie haben im obigen Beispiel ein Kompatibilitätsproblem mit Ihrer Bibliothek gefunden und möchten einige lokale Tests durchführen. Für das Testen müssen Sie alle Abhängigkeiten installieren. Sie sollten die folgenden Schritte ausführen, um eine neue Umgebung zu erstellen:

$ pyenv virtualenv 3.6.8 project2-tmp
$ pyenv local project2-tmp

Sobald Sie mit Ihren lokalen Tests zufrieden sind, können Sie problemlos zu Ihrer Standardumgebung zurückkehren:

$ pyenv local project2 3.6.8

Fazit

Sie können jetzt einfacher zu einem Projekt beitragen, das mehrere Umgebungen unterstützen möchte. Sie können auch die neuesten und besten Python-Versionen einfacher testen, ohne sich Sorgen machen zu müssen, dass Ihre Entwicklungsmaschine durcheinander gebracht wird. Dies alles mit einem wunderbaren Tool:pyenv.

Sie haben gesehen, wiepyenv Ihnen helfen kann:

  • Installieren Sie mehrere Versionen von Python

  • Wechseln Sie zwischen den installierten Versionen

  • Verwenden Sie virtuelle Umgebungen mitpyenv

  • Aktivieren Sie verschiedene Python-Versionen und virtuelle Umgebungen automatisch

Wenn Sie noch Fragen haben, können Sie sich entweder im Kommentarbereich oder auf Twitter an uns wenden. Darüber hinaus istpyenv documentation eine großartige Ressource.

Bonus: Anzeigen Ihres Umgebungsnamens in Ihrer Eingabeaufforderung

Wenn Sie wie ich sind und ständig zwischen verschiedenen virtuellen Umgebungen und Python-Versionen wechseln, ist es leicht zu verwechseln, welche Version derzeit aktiv ist. Ich verwendeoh-my-zsh undagnoster theme, wodurch meine Eingabeaufforderung standardmäßig folgendermaßen aussieht:

Agnoster theme with no pyenv prompt

Auf einen Blick weiß ich nicht, welche Python-Version aktiv ist. Um es herauszufinden, müsste ichpython -V oderpyenv version ausführen. Um meinen Zeitaufwand für das Herausfinden meiner aktiven Python-Umgebung zu verringern, füge ich meiner Eingabeaufforderung die von mir verwendete virtuelle Umgebung vonpyenvhinzu:

Environment name being shown in ZSH command prompt

Meine Python-Version ist in diesem Fallproject1-venv und wird sofort am Anfang der Eingabeaufforderung angezeigt. Auf diese Weise kann ich sofort erkennen, welche Version von Python ich verwende. Wenn Sie dies auch verwenden möchten, können Sie meineagnoster-pyenv theme verwenden.