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.
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.
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
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.
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.
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 ...
.
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.
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