Je vous ai fait écrire un article sur le plongeon. Merci beaucoup.
Comme @shibukawa l'a mentionné dans la section des commentaires, virtualenv et venv sont presque les mêmes, il y a donc en fait deux choix, pyenv ou virtualenv (venv), mais virtualenv s'est déjà imposé comme le standard de facto.
Je recommande pyenv dans l'article, mais j'utiliserai virtualenv. Je suis un utilisateur léger de Python, donc je veux rendre l'environnement environnant aussi de facto que possible.
Si vous recherchez la construction de l'environnement de Python, vous pouvez trouver le nom de l'outil mentionné dans le titre. Bref, c'est un outil d'isolement d'environnement, mais ces outils changent rapidement et les débutants ne savent pas ce que c'est. Je n'ai pas beaucoup utilisé Python moi-même, j'ai donc résumé les fonctionnalités et l'utilisation de chacun.
Python peut être utilisé pour le développement à grande échelle, mais il est également très utile en tant qu'outil de gabarit pour rationaliser les tâches quotidiennes. Dans l'article d'introduction, il est pris pour acquis d'utiliser ces outils d'isolation d'environnement, mais je pense que c'est une mauvaise habitude de simplement augmenter le seuil inutilement. Vous n'avez pas besoin de ces outils lorsque vous les utilisez comme vos propres outils pratiques. Profitez de la programmation avec Python plutôt que d'être épuisé en créant un environnement.
$ 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
Il y en a six, donc je ne connais pas la traduction immédiatement, mais comme le montre la liste ci-dessous, il y a deux ensembles, vous pouvez donc penser qu'il existe en fait trois types.
pyenv-virtualenv
est un plugin pour pyenv
. Virtualenvwapper
est-il un script wrapper pour virtualenv
? , «pyvenv» est également traité comme un emballage pour «venv». Veuillez noter que certains articles peuvent confondre pyenv-virtualenv
avec virtualenv
. Les noms sont trop confus, mais les deux sont différents.
Utilisez cette option lorsque vous souhaitez utiliser plusieurs versions différentes de Python. Même s'il existe plusieurs versions, ce n'est pas un grand groupe de séries Python 2 et 3. Il est possible de gérer des divisions de version fines telles que 3.3 et 3.4, 3.3.0 et 3.3.1.
La gestion de Python pour chaque version n'est pas une tâche difficile car il suffit de l'installer séparément pour chaque version et de remplacer les liens symboliques en temps opportun, mais des outils spécialisés le géreront de manière centralisée. Est toujours pratique.
Avec pyenv, il est facile de l'essayer car une nouvelle version de Python a été publiée.
Malheureusement, depuis le 1er janvier 2017, il ne semble pas compatible avec Windows. Il semble qu'il soit développé avec le script shell main autant que possible, il semble donc peu probable que nous puissions nous attendre à un support dans le futur.
#Une liste des versions installables s'affiche. Pas seulement du Python ordinaire
#Distributions Python telles que anaconda et jython,Un autre comme pypy
#Je suis surpris que même l'implémentation Python soit répertoriée.
$ pyenv install --list
#Installer en spécifiant la version
$ pyenv install 3.4.3
$ pyenv install 3.6.0
#Si vous spécifiez une version duveteuse, la version correspondante sera affichée.
#C'est pratique car il le listera.
$ 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
#Il semble que vous deviez exécuter cette commande après une nouvelle installation.
#Je pense que ce serait bien si vous pouviez le faire automatiquement.
$ pyenv rehash
#Spécification de la version Python à utiliser globalement
$ pyenv global 3.4.0
$ pyenv version
Python 3.4.0
#Spécifier la version Python à utiliser localement dans l'annuaire
$ cd ~/project
$ pyenv local 3.3.4
$ pyenv version
Python 3.3.4
$ cd ~
$ pyenv version
Python 3.4.0
#Spécification de la version Python pour utiliser shell localement
$ 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
un point
L'idée de base est très simple quant à la façon de réaliser la fonction appelée Python qui est locale au répertoire, il n'y a rien de bien fait.
global La version Python spécifiée est enregistrée sous forme de chaîne dans le fichier texte ~ / .pyenv / version
. Si vous spécifiez directory local, un fichier texte appelé .python-version
est créé directement sous le répertoire et la chaîne de version y est enregistrée.
Chaque version de Python est enregistrée dans ~ / .pyenv / versions
pour chaque version, et lors du changement de version, elle est uniquement remplacée par un lien symbolique vers le Python correspondant. C'est la première idée qui vous vient à l'esprit lorsque vous essayez de réaliser vous-même la même chose. C'est un aparté que c'est un gaspillage de simplement l'utiliser comme une boîte noire complète, car les outils largement utilisés n'utilisent pas toujours des techniques spéciales.
«virtualenv» et «pyenv-virtualenv» sont des applications distinctes. Veuillez noter que certains articles peuvent être confus.
pyenv-virtualenv
est un plugin pour pyenv
. Vous pouvez installer plusieurs versions de Python avec pyenv
, mais le répertoire site-packages
qui gère les modules pour chaque version de Python est commun. Vous pouvez utiliser pyenv-virtualenv
pour gérer différents packages de sites
dans la même version de Python.
Vous pouvez minimiser la différence entre l'environnement de développement et l'environnement d'exécution en corrigeant toutes les versions des modules utilisés dans l'application en cours de développement ou en installant uniquement les modules minimum requis.
# pyenv-Installation de virtualenv.
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
# .Ajouter les paramètres initiaux à xxxrc
#Pourquoi vous utilisez eval, facultatif`-`Je me demandais ce que c'était, alors j'ai posé une question avec un débordement de pile.
# http://ja.stackoverflow.com/questions/32043/xxxenv-Eval lors de l'initialisation de-xxxenv-init-Sens de
vi ~/.bashrc
eval "$(pyenv virtualenv-init -)"
#Tout nom qui identifie la version Python et l'environnement virtuel dans pyenv virtualenv(tag)Spécifier.
$ pyenv virtualenv <pyversion> <tag>
#Puis le site correspondant-Le répertoire des packages sera généré
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
#Vous pouvez vérifier l'environnement virtuel créé à partir des versions.
$ pyenv versions
system
3.5.3/envs/virtual-3.5.3 # <<Les deux sont probablement les mêmes
virtual-3.5.3 # <<
#Si vous spécifiez le nom de la balise créée dans la sous-commande activate, l'environnement virtuel sera activé.
$ pyenv activate <tag>
#Le nom de la balise doit être affiché à gauche de l'invite du shell comme ceci
(<tag>)$
#Exécutez disable pour mettre fin à l'environnement virtuel.
$ pyenv deactivate
#Vous pouvez créer un virtualenv local de répertoire comme un pyenv normal.
#Ajoutez pyenv local au répertoire racine de votre projet de développement d'application
#C'est une bonne idée de le préciser.
$ pyenv local <tag>
Je ne sais pas grand-chose sur l'histoire de Python, mais il semble que «virtualenv» était à l'origine célèbre comme outil de construction d'environnement virtuel, et «pyenv» semble être un retardataire. Si vous essayez «virtualenv» après avoir utilisé «pyenv», cela vous semble certainement moins familier que «pyenv». ~~ virtualenv
ne peut pas être utilisé pour changer la version de Python lui-même ~~ (on m'a fait remarquer dans le commentaire. Il semble que cela puisse être changé), et aussi en termes d'isolation des packages de site, pyenv-virtualenv
J'ai senti que c'était plus facile à utiliser. Cela peut être naturel parce que «pyenv, pyenv-virtualenv» est un retardataire, mais il y a un sentiment de déception. Il semble qu'il y aura une longue journée pour l'environnement environnant comme la prise en charge des plug-ins de l'éditeur car il a une longue histoire.
Je ne l'utilise peut-être plus pour créer un nouvel environnement, mais j'ai essayé toutes les fonctions pour le moment.
#Installation de virtualenv
$ sudo pip3 install virtualenv
#Créez un environnement virtuel en spécifiant un répertoire.
$ python3 -m virtualenv <dir>
#Ensuite, un tel répertoire sera créé. Le nom du répertoire est virtualenv
#Cela peut varier selon la version.
# [Environnement de confirmation] Ubuntu 16.04 virtualenv 15.1.0
$ cd <dir>
$ ls
bin include lib pip-selfcheck.json
#Lorsque vous chargez le script d'activation du répertoire généré avec la commande source
#L'environnement virtuel est activé.
$ source bin/activate
#Lorsque l'environnement virtuel est actif, le nom du répertoire racine de l'environnement virtuel est affiché sur le côté gauche de l'invite.
(<dir>)$
#Désactivez l'environnement virtuel avec désactiver
(<dir>)% deactivate
À propos, virtualenv seul ne peut pas être facilement supprimé, et de nombreux répertoires pour virtualenv sont créés, ce qui est un autre inconvénient. En introduisant virtualenvwapper, vous pouvez utiliser des commandes utilitaires pour utiliser virtualenv commodément, ce qui le rend un peu plus facile à utiliser. Je l'ai installé en me référant à Gestion de l'environnement python avec virtualenv.
# virtualenv /Installation de virtualenvwrapper
$ sudo pip3 install virtualenv
$ sudo pip3 install virtualenvwrapper
# ~/.Ajouter le code d'initialisation à xxxrc
$ vim ~/.bashrc
source /usr/local/bin/virtualenvwrapper.sh
export WORKON_HOME=~/.virtualenvs
Reconnectons-nous et utilisons-le.
/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, j'ai quelque chose qui ressemblait à un message d'erreur. Depuis que je l'ai installé avec pip3
, il a été installé en tant que module python3
, mais comme / usr / bin / python d'Ubuntu 16.04 est python2.7
, virtualenvwrapper
n'est pas installé. Il semble que vous disiez. Il semble que vous deviez spécifier le chemin de Python3 dans VIRTUALENVWRAPPER_PYTHON
. Comme c'est gentil! Je veux être apprenti. Ajoutons les paramètres et reconnectons-nous.
$ vim ~/.bashrc
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
Cette fois, j'ai reçu un autre message.
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
En regardant le contenu, c'est juste un script shell. Il semble qu'un script hook puisse être préparé lorsqu'un événement se produit. Eh bien, ignorons-le pour l'instant. Je vais l'utiliser normalement pour le moment.
#Lorsque j'exécute virtualenvwrapper, les commandes disponibles sont faussées.
$ virtualenvwrapper
Commands available:
add2virtualenv: add directory to the import path
allvirtualenv: run a command in all virtualenvs
...
#Vous pouvez créer un environnement virtuel avec mkvirtualenv.--no-site-Lorsque le package n'est pas spécifié,
# $VIRTUALENVWRAPPER_Site PYTHON-Il semble reprendre les paquets. Créer un environnement virtuel
#Compte tenu du but, il est généralement--no-site-Je pense que vous devriez spécifier les packages.
$ mkvirtualenv --no-site-package <tag>
#Une fois créé, le nom de l'environnement sera ajouté à l'extrême gauche de l'invite de commande
(<tag>)$
#Le corps de l'environnement virtuel avec cdvirtualenv? Peut se déplacer vers le répertoire où
$ cdvirtualenv
$ pwd
/home/vagrant/.virtualenvs/<tag>
#Lorsque virtualenv est une unité unique, le répertoire virtualenv qui a été placé directement sous le répertoire de l'environnement virtuel est
# $WORKON_Il semble être placé sous HOME. C'était un peu rafraîchissant.
$ ls
bin include lib pip-selfcheck.json
#Vous pouvez également supprimer des environnements virtuels qui n'ont pas pu être réalisés avec virtualenv seul.
$ deactivate
$ rmvirtualenv <tag>
Prenons en charge venv
avec des fonctionnalités telles que virtualenv
en standard! Il semble donc que ce soit un module standard ajouté à partir de Python 3.3. Il n'y a pas de commande appelée venv
, alors spécifiez le module de python
et utilisez-le.
Ensuite, lorsque je faisais des recherches sur pyvenv, j'ai trouvé un tel article.
L'histoire de l'utilisation de venv parce que pyvenv est obsolète
Aussi, je me demandais si c'était quelque chose comme «pyenv» et «virtualenv» ... mais c'était plus simple. En conclusion, «pyvenv» est comme le sucre de syntaxe de «venv», pas complètement différent comme «pyenv» et «virtualenv».
#Comment appeler venv
$ python3 -m venv <options>
#Ubuntu 16 est la bibliothèque standard pour python.En 04, il est installé dans le répertoire suivant.
$ cd /usr/lib/python3.5
$ find `pwd` -name "*venv*"
/usr/lib/python3.5/venv
# 2.7 ne semble pas avoir venv.
$ cd /usr/lib/python2.7
$ find `pwd` -name "*venv*"
pyvenv peut être utilisé sur Ubuntu 16.04 en installant les packages suivants.
$ sudo apt-get install -y python3-venv
#Si vous vérifiez avec dpkg/usr/bin/pyenv ressemble au corps principal.
% 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
En regardant le contenu, c'est vraiment juste d'appeler «venv». C'est un mystère pourquoi j'ai décidé de créer cela.
La raison pour laquelle pyvenv
est obsolète est que, comme vous pouvez le voir dans le lien de référence, si vous l'appelez explicitement comme un module Python avec python -m
, la version Python sera claire et elle ne sera pas parcourue! Il paraît que. Vous pouvez le dire depuis le début! Je veux dire ... A partir de maintenant, nous expliquerons avec python -m venv
sans utiliser pyven v
.
# /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)
#Afficher l'aide
$ python3 -m venv -h
#Créer un environnement virtuel
$ python3 -m venv <dir>
#D'une manière ou d'une autre, un répertoire a été créé. C'est la même configuration que virtualenv.
$ cd <dir>
$ ls
bin include lib lib64 pyvenv.cfg share
#L'utilisation est la même que virtualenv.
$ source bin/activate
(dir)$
$ deactivate
$
Il n'y a qu'une norme et c'est assez simple. Je suis content que ce soit standard, mais j'ai estimé que ce n'était pas suffisant pour un fonctionnement à grande échelle car il ne pouvait pas être utilisé ou avait des fonctions insuffisantes à moins qu'il ne soit 3.3 ou supérieur.
Depuis janvier 2017, la combinaison de «pyenv» et de «pyenv-virtualenv» est probablement la plus pratique. C'est dommage qu'il ne prenne pas en charge Windows, mais il semble préférable d'utiliser Linux sur une machine virtuelle pour un développement à grande échelle.
Puisque virtualenv
peut être utilisé sous Windows, il semble qu'il puisse être utilisé pour créer un environnement propre lorsque vous voulez vérifier le fonctionnement du module de distribution. Vous pouvez utiliser venv
, mais ça fait mal de ne pas pouvoir l'utiliser avec Python 2.7.
Je pense que la façon la plus simple d'utiliser Python comme outil de jig est de se référer aux informations sur ce site.
pyenv, pyenv-virtualenv
virtualenv, virtualenvwapper
pyvenv, venv
Recommended Posts