[PYTHON] Comment utiliser pyenv et pyenv-virtualenv à votre manière

introduction

Un collègue a dit: "L'environnement de développement Python est pipenv, n'est-ce pas?" Et s'est dit: "Non, je ne suis pas gêné par pyenv + pyenv-virtualenv." Je n'avais rien à passer, alors j'ai décidé de l'écrire.

Qu'est-ce que pyenv / virtualenv

Ceci est pour ceux qui ne sont pas familiers avec pyenv et pyenv-virtualenv.

Premièrement, pyenv est «un mécanisme qui vous permet d'installer plusieurs versions de python sur une machine et de basculer entre elles». Par exemple, il serait fastidieux de réinstaller Python un par un lorsque "les nouveaux projets utilisent la dernière version 3.8.5, mais les anciens projets en mode maintenance doivent utiliser 3.6.9". À ce moment-là, vous pouvez utiliser pyenv pour installer plusieurs versions de Python et basculer entre elles.

Et virtualenv est "un mécanisme pour avoir plusieurs versions d'environnement python". Cela tente de résoudre le problème selon lequel "python ne peut enregistrer qu'un seul ensemble de bibliothèques dépendantes à l'échelle du système". Ceci est différent de node.js, qui crée un répertoire appelé node_moduels / pour chaque projet et installe les bibliothèques dépendantes sous celui-ci.

Par exemple, le projet A dépend des requêtes et du pytorch, et le projet B dépend des pandas et de numpy. Si les deux projets A et B fonctionnent sur la même version de python, vous devrez y installer les deux bibliothèques dépendantes. Cependant, cela peut provoquer des conflits entre les bibliothèques. Pour éviter cela, créez python 3.8.5 pour le projet A et pythion 3.8.5 pour le projet B. Virtualenv fait cela pour vous. pyenv-virtualenv est un mécanisme qui vous permet d'utiliser ce virtualenv dans pyenv d'une manière agréable.

Installation

Je pense qu'il est plus facile pour les utilisateurs de macOS d'utiliser l'homebrew.

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

Pour les autres utilisateurs d'OS, ou si vous souhaitez vraiment utiliser le dernier pyenv, vous pouvez également le cloner directement à partir du lipo GitHub.

Installez 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

Et installez 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

Si vous utilisez zsh ou d'autres shells, veuillez lire chaque fichier de configuration au lieu de ~ / .bash_profile.

Il existe également un programme d'installation dans pyenv, vous pouvez donc l'utiliser également. En gros, il résume simplement ce que vous faites ci-dessus, mais c'est facile.

$ curl https://pyenv.run | bash

Bases d'utilisation

Installation de Python

Si vous pouvez installer pyenv avec succès, installez d'abord python. Avant cela, vérifiez d'abord les versions de python disponibles.

$ pyenv install --list

Le seul numéro de version non marqué est cpython. En plus de cela, vous pouvez choisir diverses choses telles que anaconda, jpython, pypy et ainsi de suite. Sélectionnez la version que vous souhaitez installer à partir d'eux

$ pyenv install <python-version>

Si tel est le cas, cette version de python sera installée.

Spécifiez Python à utiliser

Vous pouvez installer plusieurs versions de Python en répétant les étapes d'installation ci-dessus. Si vous souhaitez vérifier la version de Python actuellement installée

$ pyenv versions

Vous pouvez voir si. Par exemple, si «3.8.5» et «3.7.9» sont installés

system
3.7.9
3.8.5

Il sera affiché comme ceci. Ici, system n'est pas pyenv mais python préparé du côté OS.

Donc, je spécifie le Python à utiliser à partir de cela, mais il existe deux types de spécification, globale et locale. Global est un paramètre qui est appliqué quel que soit le répertoire dans lequel vous vous trouvez, et local est un paramètre qui est appliqué sous un répertoire spécifique. La méthode de réglage est la suivante.

Paramètres globaux

$ pyenv global <python-version>

Paramètres locaux

$ pyenv local <python-version>

Ensuite, lors du démarrage de python, accédez aux paramètres locaux → paramètres globaux. Par exemple

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

Si tel est le cas, python 3.6.9 sera utilisé sous / Users / johndoe / projectX, et 3.8.5 sera utilisé dans d'autres répertoires.

Maintenant, quand je vérifie quelle version sera utilisée

$ pyenv version

Est utilisé. Par exemple, dans l'exemple ci-dessus

$ 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)

Ce sera. Et, comme il est dit "défini par ...", la version réelle est simplement écrite dans le fichier. Comme vous pouvez le voir dans le contenu, ce ne sont que des fichiers texte avec le numéro de version ou écrits. pyenv l'examine et identifie la version de python à utiliser.

Utilisez pyenv-virtualenv

Ensuite, comment utiliser pyenv-virtualenv. Tout d'abord

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

Faites une copie d'une version spécifique de Python. Par exemple

$ pyenv virtualenv 3.8.5 projectA

Ensuite, 3.8.5 pour projectA sera créé. Si vous essayez pyenv version ici

system
3.7.9
3.8.5
3.8.5/envs/projectA
projectA

Il sera affiché. L'environnement que vous venez de créer (copié) est enregistré comme Python disponible. Il semble que vous en faites deux, 3.8.5 / envs / projectA et projectA, mais il n'y a qu'une seule entité.

Le reste est le même que le pyenv normal,

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

Ensuite, vous pouvez utiliser projectA comme environnement 3.8.5 dédié. Quand tu n'en as pas besoin

$ pyenv uninstall projectA

Si tel est le cas, il sera effacé proprement. Dans ce cas également, 3.8.5 lui-même reste, donc si vous voulez l'utiliser dans un autre projet, vous pouvez créer un nouvel environnement en utilisant pyenv virtualenv 3.8.5 ....

Comment utiliser votre propre style

Quand je démarre un nouveau projet, je l'utilise comme ça.

$ mkdir projectZ
$ cd projectZ
$ pyenv virtualenv 3.8.5 projectZ
$ pyenv local projectZ
$ pip install .... (Bibliothèques requises)
$ pip freeze -l > requirements.txt

De cette manière, un environnement est créé pour chaque projet. De plus, par exemple, si vous souhaitez vérifier l'opération avec une autre version

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

Vous pouvez changer simplement en faisant.

Résumé

J'ai essayé d'expliquer pyenv + pyenv-virtualenv que j'utilise depuis de nombreuses années.

C'est un problème de pip plutôt qu'un problème de pyenv, mais il a un "mécanisme faible pour gérer les dépendances". requirements.txt doit être mis à jour manuellement, et si vous le créez avec pip freeze, il listera non seulement ce que vous avez installé mais aussi les bibliothèques dont il dépend. Lors de la mise à jour de la version de la bibliothèque, individuellement pip install -U pour refléter les changements dans requirements.txt. Je ne peux pas le faire pendant un instant.

En d'autres termes, "je ne suis pas gêné avec pyenv + pyenv-virtualenv" n'est pas très précis, et "je suis un peu gênant, mais pyenv + pyenv-virtualenv fonctionne dans un petit tour, donc j'ai réussi à le faire."

Pipenv a été créé pour résoudre de tels problèmes, mais je pense personnellement que la poésie semble être meilleure. Et ça semble assez bien de l'utiliser dans certains projets, mais à la fin je ne pouvais pas jeter pyenv quand je mettais de la poésie, et j'ai pensé que ça irait comme ça.

Cependant, la poésie utilise venv (outil de création d'environnement virtuel standard python) en interne pour créer un environnement pour chaque projet. Il semble donc que pyenv-virtualenv + pip puisse être remplacé par de la poésie. Je voudrais essayer de l'utiliser un peu plus agressivement et voir si je peux faire ce que j'ai pu faire.

Recommended Posts

Comment utiliser pyenv et pyenv-virtualenv à votre manière
Comment utiliser is et == en Python
Comment utiliser Pyenv
Comment utiliser pyenv-virtualenv
Comment définir votre propre cible dans Sage
Comment utiliser tkinter avec python dans pyenv
Comment utiliser Decorator dans Django et comment le créer
Comment installer et utiliser Tesseract-OCR
Comment utiliser les classes dans Theano
Comment utiliser SQLite en Python
Résumé de l'utilisation de pyenv-virtualenv
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Comment créer et utiliser des bibliothèques statiques / dynamiques en langage C
Comment utiliser .bash_profile et .bashrc
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Comment installer et utiliser Graphviz
Comment utiliser Mysql avec python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment utiliser Docker pour conteneuriser votre application et comment utiliser Docker Compose pour exécuter votre application dans un environnement de développement
[Python] Lorsque vous souhaitez importer et utiliser votre propre package dans le répertoire supérieur
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
Pour utiliser python, mettez pyenv sur macOS avec PyCall
Comment afficher les octets de la même manière en Java et Python
Comment utiliser les colonnes calculées dans CASTable
[Introduction à Python] Comment utiliser la classe en Python?
Comment installer et utiliser pandas_datareader [Python]
Un moyen simple d'utiliser Wikipedia avec Python
Comment utiliser l'interpréteur d'Anaconda avec PyCharm
Comment installer votre propre autorité de certification (racine)
python: Comment utiliser les locals () et globals ()
Comment utiliser __slots__ dans la classe Python
Comment utiliser le zip Python et énumérer
Comment utiliser les expressions régulières en Python
Comment utiliser Map dans ViewPager d'Android
Comment utiliser les pandas Timestamp et date_range
Introduction à l'utilisation de Pytorch Lightning ~ Jusqu'à ce que vous formatez votre propre modèle et le produisez sur tensorboard ~
Comment utiliser la bibliothèque C en Python
Mettez Linux dans Chromebook et utilisez R ...
Introduction du cadre de style Sinatra et comment l'utiliser
Comment générer une séquence en Python et C ++
Comment utiliser la bibliothèque d'images Python dans la série python3
Résumé de l'utilisation de MNIST avec Python
[Python] Comment utiliser la fonction de hachage et taple.
Comment utiliser Ruby's PyCall pour activer Pyenv Python
Comment installer le détecteur Cascade et comment l'utiliser
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Comment passer le chemin vers la bibliothèque construite avec pyenv et virtualenv avec PyCharm
Conseils pour ceux qui ne savent pas comment utiliser is et == en Python
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Installez pyenv et pyenv-virtualenv
Comment utiliser Seaboan
Comment utiliser la correspondance d'image