[PYTHON] Wie Sie pyenv und pyenv-virtualenv auf Ihre eigene Weise verwenden

Einführung

Ein Kollege sagte: "Die Python-Entwicklungsumgebung ist Pipenv, nicht wahr?" Und dachte: "Nein, ich bin nicht mit pyenv + pyenv-virtualenv belästigt." Ich hatte nichts zu übergeben, also beschloss ich, es zu schreiben.

Was ist pyenv / virtualenv?

Dies ist für diejenigen, die nicht mit pyenv und pyenv-virtualenv vertraut sind.

Erstens ist pyenv "ein Mechanismus, mit dem Sie mehrere Python-Versionen auf einem Computer installieren und zwischen diesen wechseln können". Zum Beispiel wäre es mühsam, Python einzeln neu zu installieren, wenn "neue Projekte die neueste Version 3.8.5 verwenden, alte Projekte im Wartungsmodus jedoch 3.6.9 verwenden müssen". Zu diesem Zeitpunkt können Sie mit pyenv mehrere Versionen von Python installieren und zwischen diesen wechseln.

Und virtualenv ist "ein Mechanismus, um mehrere Versionen der Python-Umgebung zu haben". Dies versucht das Problem zu lösen, dass "Python nur einen Satz abhängiger Bibliotheken systemweit registrieren kann". Dies unterscheidet sich von node.js, das für jedes Projekt ein Verzeichnis mit dem Namen node_moduels / erstellt und abhängige Bibliotheken darunter installiert.

Angenommen, Projekt A hängt von Anforderungen und Pytorch ab und Projekt B hängt von Pandas und Numpy ab. Wenn beide Projekte A und B mit derselben Python-Version arbeiten, müssen Sie dort beide abhängigen Bibliotheken installieren. Dies kann jedoch zu Konflikten zwischen Bibliotheken führen. Um dies zu vermeiden, erstellen Sie Python 3.8.5 für Projekt A und Python 3.8.5 für Projekt B. Virtualenv erledigt das für Sie. pyenv-virtualenv ist ein Mechanismus, mit dem Sie diese virtualenv in pyenv auf nette Weise verwenden können.

Installation

Ich denke, es ist für MacOS-Leute am einfachsten, Homebrew zu verwenden.

$ brew update
$ brew install pyenv
$ brew install pyenv-virtualenv

Für andere Betriebssystembenutzer oder wenn Sie wirklich das neueste pyenv verwenden möchten, können Sie es auch direkt vom GitHub-Lipo klonen.

Installieren Sie pyenv

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
$ source ~/.bash_profile

Und installieren Sie pyenv-virtualenv

$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

Wenn Sie zsh oder andere Shells verwenden, lesen Sie bitte jede Konfigurationsdatei anstelle von "~ / .bash_profile".

Es gibt auch ein Installationsprogramm in pyenv, so dass Sie es auch verwenden können. Grundsätzlich fasst es nur zusammen, was Sie oben tun, aber es ist einfach.

$ curl https://pyenv.run | bash

Grundlagen der Verwendung

Python-Installation

Wenn Sie pyenv erfolgreich installieren können, installieren Sie zuerst Python. Überprüfen Sie zuvor zunächst die verfügbaren Python-Versionen.

$ pyenv install --list

Die einzige nicht markierte Versionsnummer ist cpython. Außerdem können Sie Anaconda, JPython, Pypy usw. auswählen. Wählen Sie die Version aus, die Sie installieren möchten

$ pyenv install <python-version>

In diesem Fall wird diese Python-Version installiert.

Geben Sie den zu verwendenden Python an

Sie können mehrere Versionen von Python installieren, indem Sie die obigen Installationsschritte wiederholen. Wenn Sie die aktuell installierte Version von Python überprüfen möchten

$ pyenv versions

Sie können sehen, ob. Zum Beispiel, wenn "3.8.5" und "3.7.9" installiert sind

system
3.7.9
3.8.5

Es wird so angezeigt. Hier ist system nicht pyenv, sondern Python, das auf der Betriebssystemseite vorbereitet wird.

Daher gebe ich den Python an, der daraus verwendet werden soll, aber es gibt zwei Arten von Spezifikationen, globale und lokale. Global ist eine Einstellung, die unabhängig von dem Verzeichnis angewendet wird, in dem Sie sich befinden, und local ist eine Einstellung, die unter einem bestimmten Verzeichnis angewendet wird. Die Einstellmethode ist wie folgt.

Globale Einstellungen

$ pyenv global <python-version>

Lokale Einstellungen

$ pyenv local <python-version>

Gehen Sie dann beim Starten von Python zu den lokalen Einstellungen → globalen Einstellungen. Zum Beispiel

$ pyenv global 3.8.5
$ cd /Users/johndoe/projectX
$ pyenv local 3.6.9

In diesem Fall wird Python 3.6.9 unter "/ Users / johndoe / projectX" und 3.8.5 in anderen Verzeichnissen verwendet.

Jetzt, wenn ich überprüfe, welche Version verwendet wird

$ pyenv version

Wird genutzt. Zum Beispiel im obigen Beispiel

$ cd /Users/johndoe/projectX
$ pyenv version
3.6.9 (set by /Users/johndoe/projectX/.python-version)
$ cd ..
$ pyenv version
3.8.5 (set by /Users/johndoe/.pyenv/version)

Es wird sein. Und wie es heißt "set by ...", wird die aktuelle Version nur in die Datei geschrieben. Wie Sie dem Inhalt entnehmen können, handelt es sich nur um Textdateien mit der Versionsnummer oder geschrieben. pyenv schaut es sich an und identifiziert die zu verwendende Python-Version.

Verwenden Sie pyenv-virtualenv

Als nächstes wird beschrieben, wie Sie pyenv-virtualenv verwenden. Als allererstes

$ pyenv virtualenv <python-version> <env-name>

Erstellen Sie eine Kopie einer bestimmten Version von Python. Zum Beispiel

$ pyenv virtualenv 3.8.5 projectA

Dann wird 3.8.5 für projectA erstellt. Wenn Sie hier versuchen, "pyenv version"

system
3.7.9
3.8.5
3.8.5/envs/projectA
projectA

Es wird angezeigt. Die gerade erstellte (kopierte) Umgebung ist als verfügbares Python registriert. Es sieht so aus, als würden Sie zwei erstellen, 3.8.5 / envs / projectA und projectA, aber es gibt nur eine Entität.

Der Rest ist der gleiche wie normaler Pyenv,

$ cd /Users/johndoe/projectA
$ pyenv local projectA

Dann können Sie projectA als dedizierte 3.8.5-Umgebung verwenden. Wenn du es nicht brauchst

$ pyenv uninstall projectA

Wenn ja, wird es sauber gelöscht. Auch in diesem Fall bleibt 3.8.5 selbst erhalten. Wenn Sie es also in einem anderen Projekt verwenden möchten, können Sie mithilfe von "pyenv virtualenv 3.8.5 ..." eine neue Umgebung erstellen.

Wie Sie Ihren eigenen Stil verwenden

Wenn ich ein neues Projekt starte, verwende ich es so.

$ mkdir projectZ
$ cd projectZ
$ pyenv virtualenv 3.8.5 projectZ
$ pyenv local projectZ
$ pip install .... (Erforderliche Bibliotheken)
$ pip freeze -l > requirements.txt

Auf diese Weise wird für jedes Projekt eine Umgebung erstellt. Außerdem, wenn Sie den Vorgang mit einer anderen Version überprüfen möchten

$ pyenv virtualenv 3.7.8 projecZ-3.7
$ pyenv local projectZ-3.7
$ pyenv install -r requirements.txt

Sie können einfach wechseln, indem Sie dies tun.

Zusammenfassung

Ich habe versucht, pyenv + pyenv-virtualenv zu erklären, das ich seit vielen Jahren benutze.

Dies ist eher ein Pip-Problem als ein Pyenv-Problem, aber es hat einen "schwachen Mechanismus für den Umgang mit Abhängigkeiten". require.txt muss manuell aktualisiert werden. Wenn Sie es mit "pip freeze" erstellen, werden nicht nur die installierten Dateien, sondern auch die Bibliotheken aufgelistet, von denen es abhängt. Wenn Sie die Version der Bibliothek aktualisieren, wählen Sie "pip install -U" einzeln aus, um die Änderungen in der Datei "resources.txt" widerzuspiegeln. Ich kann es keinen Moment tun.

Mit anderen Worten: "Ich bin nicht durch pyenv + pyenv-virtualenv belästigt" ist nicht sehr genau und "Ich bin ein wenig belästigt, aber pyenv + pyenv-virtualenv funktioniert in einer kleinen Runde, also habe ich es geschafft."

Pipenv wurde geschaffen, um solche Probleme zu lösen, aber ich persönlich denke, dass Poesie besser zu sein scheint. Und es scheint ziemlich gut zu sein, es in einigen Projekten zu verwenden, aber am Ende konnte ich Pyenv nicht wegwerfen, wenn ich Gedichte legte, und ich dachte, dass es in Ordnung wäre, wie es ist.

In Poetry wird jedoch intern venv (Python Standard-Tool zum Erstellen virtueller Umgebungen) verwendet, um für jedes Projekt eine Umgebung zu erstellen. Es scheint also, dass pyenv-virtualenv + pip durch Poesie ersetzt werden kann. Ich würde gerne versuchen, es etwas aggressiver zu verwenden und zu sehen, ob ich das kann, was ich konnte.

Recommended Posts

Wie Sie pyenv und pyenv-virtualenv auf Ihre eigene Weise verwenden
Verwendung ist und == in Python
Wie benutzt man Pyenv?
So definieren Sie Ihr eigenes Ziel in Sage
Wie man tkinter mit Python in Pyenv benutzt
Wie man Decorator in Django benutzt und wie man es macht
So installieren und verwenden Sie Tesseract-OCR
Verwendung von Klassen in Theano
Verwendung von SQLite in Python
Zusammenfassung der Verwendung von pyenv-virtualenv
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
Erstellen und Verwenden von statischen / dynamischen Bibliotheken in C-Sprache
Verwendung von .bash_profile und .bashrc
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
So installieren und verwenden Sie Graphviz
Wie man MySQL mit Python benutzt
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Verwendung von Docker zum Containerisieren Ihrer Anwendung und Verwenden von Docker Compose zum Ausführen Ihrer Anwendung in einer Entwicklungsumgebung
[Python] Wenn Sie Ihr eigenes Paket im oberen Verzeichnis importieren und verwenden möchten
Verwendung von Funktionen in separaten Dateien Perl-Version und Python-Version
So verwenden Sie Python in Pyenv unter MacOS mit PyCall
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
Verwendung berechneter Spalten in CASTable
[Einführung in Python] Wie verwende ich eine Klasse in Python?
So installieren und verwenden Sie pandas_datareader [Python]
Einfache Möglichkeit, Wikipedia mit Python zu verwenden
Verwendung von Anacondas Interpreter mit PyCharm
So installieren Sie Ihre eigene (Root-) Zertifizierungsstelle
Python: Verwendung von Einheimischen () und Globalen ()
Verwendung von __slots__ in der Python-Klasse
Verwendung von Python zip und Aufzählung
Verwendung regulärer Ausdrücke in Python
So verwenden Sie Map in ViewPager von Android
Verwendung von pandas Timestamp und date_range
Einführung in die Verwendung von Pytorch Lightning ~ Bis Sie Ihr eigenes Modell formatieren und auf Tensorboard ausgeben ~
Verwendung der C-Bibliothek in Python
Setzen Sie Linux in Chromebook ein und verwenden Sie R ...
Einführung des Sinatra-Frameworks und dessen Verwendung
So generieren Sie eine Sequenz in Python und C ++
Verwendung der Python-Bildbibliothek in der Python3-Serie
Zusammenfassung der Verwendung von MNIST mit Python
[Python] Verwendung von Hash-Funktion und Taple.
Verwendung von Ruby's PyCall zum Aktivieren von pyenv Python
So installieren Sie den Cascade-Detektor und wie verwenden Sie ihn
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
So übergeben Sie den Pfad zu der mit pyenv und virtualenv mit PyCharm erstellten Bibliothek
Tipps für diejenigen, die verwirrt sind, wie man is und == in Python verwendet
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Installieren Sie pyenv und pyenv-virtualenv
Wie benutzt man Seaboan?
Verwendung von Image-Match