Construction d'environnement virtuel Python (version 2017) pyenv et pyenv-virtualenv et virtualenv et virtualenv wrapper et pyvenv et venv

Postscript 29/01/2017

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.

introduction

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.

Avez-vous vraiment besoin de cet environnement virtuel?

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.

environnement de test

    $ 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

Pertinence de chaque outil

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.

Essayez pyenv

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.

Essayez pyenv-virtualenv

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

virtualenv et virtualenvwapper

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.

Essayez d'utiliser virtualenv seul

    #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

Essayez d'utiliser virtualenvwapper

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

pyvenv et venv

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)

Essayez venv

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


Résumé

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.

Lien de référence

pyenv, pyenv-virtualenv

virtualenv, virtualenvwapper

pyvenv, venv

Recommended Posts

Construction d'environnement virtuel Python (version 2017) pyenv et pyenv-virtualenv et virtualenv et virtualenv wrapper et pyvenv et venv
Construction de l'environnement Python3 TensorFlow (Mac et pyenv virtualenv)
Créer un environnement avec pyenv et pyenv-virtualenv
Créez un environnement virtuel avec pyenv et venv
environnement de développement python -utilisation de pyenv et virtualenv-
Python: création d'un environnement virtuel (venv), démarrage et arrêt
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
[Python] Construction de l'environnement Django (pyenv + pyenv-virtualenv + Anaconda) pour macOS
Construction d'environnement Python et TensorFlow
venv: gestion de l'environnement virtuel Python
python avec pyenv et venv
environnement virtuel standard python venv
Construction d'environnement de python et opencv
Résumé de la gestion des versions de l'environnement virtuel Python
Construction d'environnement Python (pyenv, anaconda, tensorflow)
Construction d'environnement Python (pyenv + poetry + pipx)
Construction de l'environnement Python3 avec pyenv-virtualenv (CentOS 7.3)
Création d'un environnement de développement local Python Partie 1 (installation de pyenv, pyenv-virtualenv, pip)
[Ubuntu 18.04] Créer un environnement Python avec pyenv + pipenv
Environnement virtuel Python et packages sur Ubuntu
À propos de l'environnement virtuel de Python version 3.7
Construction de l'environnement de développement Python3 + venv + VSCode + macOS
Créer un environnement pour Python et l'apprentissage automatique (macOS)
Créez un environnement virtuel pour python avec pyenv
Nettoyer l'environnement python avec Pythonz et virtualenv
Construire un environnement python avec virtualenv et direnv
Construction de l'environnement Python (Anaconda + VSCode) @ Windows10 [version janvier 2020]
Gérez l'environnement de plusieurs versions de Python avec Pythonz, virtualenv
Installation de Python 3 et Flask [Résumé de la construction de l'environnement]
Créer un environnement virtuel Python simple sans utiliser pyenv
construction d'environnement python
[Venv] Créer un environnement virtuel python sur Ubuntu
Python - Construction de l'environnement
Travaillez dans un environnement virtuel avec Python virtualenv.
Construction d'environnement d'oreiller - Environnement virtuel par virtualenv, environnement interactif par iPython
Utiliser jupyter-lab installé dans l'environnement virtuel python (venv)
Construction de l'environnement Python
[Django3] Construction de l'environnement et résumé de divers paramètres [Python3]
Construction de l'environnement Python 3.x par Pyenv (CentOS, Ubuntu)
De la construction d'environnement Python à la construction d'environnement virtuel avec anaconda
Construction d'environnement virtuel avec Docker + Flask (Python) + notebook Jupyter
Construire un environnement Python avec pyenv, pyenv-virtualenv, Anaconda (Miniconda)
Construire un environnement virtuel Python en utilisant venv (Django + MySQL ①)
Installez pyenv sur Raspberry Pi pour gérer Python
Installer l'environnement Python sur un PC local (pyenv, venv sur Mac)
Installez pyenv et pyenv-virtualenv
construction d'environnement python homebrew
Construction de l'environnement de développement Python
environnement virtuel python Pipenv
Installer python (pyenv, pyenv-virtualenv)
environnement virtuel en Python
construction de l'environnement pyenv + fish
Construction de l'environnement de développement python2.7