without - virtualenv python package




Quelle est la différence entre venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc.? (2)

Python 3.3 inclut dans sa bibliothèque standard le nouveau paquet venv . Que fait-il et en quoi diffère-t-il de tous les autres paquets qui semblent correspondre au regex (py)?(v|virtual|pip)?env ?


Les paquets PyPI ne sont pas dans la bibliothèque standard:

  • virtualenv est un outil très populaire qui crée des environnements Python isolés pour les bibliothèques Python. Si vous n'êtes pas familier avec cet outil, je vous recommande fortement de l'apprendre, car c'est un outil très utile, et je vais faire des comparaisons avec cet outil pour la suite de cette réponse.

    Cela fonctionne en installant un groupe de fichiers dans un répertoire (par exemple: env/ ), puis en modifiant la variable d’environnement PATH pour qu’elle soit préfixée par un répertoire bin personnalisé (par exemple: env/bin/ ). Une copie exacte du binaire python ou python3 est placée dans ce répertoire, mais Python est programmé pour rechercher les bibliothèques relatives à son chemin d’abord, dans le répertoire environment. Cela ne fait pas partie de la bibliothèque standard de Python, mais est officiellement béni par la PyPA (Python Packaging Authority). Une fois activé, vous pouvez installer des packages dans l'environnement virtuel à l'aide de pip .

  • pyenv est utilisé pour isoler les versions Python. Par exemple, vous pouvez tester votre code avec Python 2.6, 2.7, 3.3, 3.4 et 3.5, vous aurez donc besoin d'un moyen de basculer entre eux. Une fois activé, il préfixe la variable d'environnement PATH avec ~/.pyenv/shims , où se trouvent des fichiers spéciaux correspondant aux commandes Python ( python , pip ). Ce ne sont pas des copies des commandes livrées par Python; ce sont des scripts spéciaux qui décident à la volée de la version de Python à exécuter en fonction de la variable d’environnement PYENV_VERSION , du fichier .python-version ou du fichier ~/.pyenv/version . pyenv également le processus de téléchargement et d'installation de plusieurs versions de Python, à l'aide de la commande pyenv install .

  • pyenv-virtualenv est un plugin pour pyenv du même auteur que pyenv , qui vous permet d’utiliser pyenv et virtualenv . Toutefois, si vous utilisez Python version 3.3 ou ultérieure, pyenv-virtualenv essaiera d’exécuter python -m venv s’il est disponible, au lieu de virtualenv . Vous pouvez utiliser virtualenv et pyenv ensemble sans pyenv-virtualenv , si vous ne souhaitez pas utiliser les fonctionnalités pratiques.

  • virtualenvwrapper est un ensemble d'extensions à virtualenv (voir la docs ). Il vous donne des commandes telles que mkvirtualenv , lssitepackages et surtout workon pour basculer entre différents répertoires virtualenv . Cet outil est particulièrement utile si vous souhaitez plusieurs répertoires virtualenv .

  • pyenv-virtualenvwrapper est un plugin pour pyenv du même auteur que pyenv , pour intégrer facilement virtualenvwrapper à pyenv .

  • pipenv , de Kenneth Reitz (l'auteur des requests ), est le projet le plus récent de cette liste. Son objectif est de combiner Pipfile , pip et virtualenv en une seule commande sur la ligne de commande. Le répertoire virtualenv généralement placé dans ~/.local/share/virtualenvs/XXX , XXX étant un hachage du chemin du répertoire du projet. Ceci diffère de virtualenv , où le répertoire est généralement dans le répertoire de travail actuel.

    Le Guide d’emballage de Python recommande pipenv lors du développement d’applications Python (par opposition aux bibliothèques). Il ne semble pas qu’il soit prévu de prendre en charge venv au lieu de virtualenv ( #15 ). De manière confuse, son option de ligne de commande --venv fait référence au répertoire virtualenv , pas à venv . De même, la variable d’environnement PIPENV_VENV_IN_PROJECT affecte l’emplacement du répertoire virtualenv et non venv ( #1919 ).

Bibliothèque standard:

  • pyvenv est un script livré avec Python 3 mais déconseillé dans Python 3.6 car il avait des problèmes (sans parler du nom déroutant). Dans Python 3.6+, l'équivalent exact est python3 -m venv .

  • venv est un paquet livré avec Python 3, que vous pouvez exécuter avec python3 -m venv (bien que, pour une raison quelconque, certaines distributions le séparent dans un paquet de distribution séparé, tel que python3-venv sur Ubuntu / Debian). Il remplit un objectif similaire à virtualenv et fonctionne de manière très similaire, mais il n’est pas nécessaire de copier les fichiers binaires Python (sauf sous Windows). Utilisez cette option si vous n'avez pas besoin de prendre en charge Python 2. Au moment de la rédaction de ce document, la communauté Python semble être satisfaite de virtualenv et je n'ai pas beaucoup entendu parler de venv .

La plupart de ces outils se complètent. Par exemple, pipenv intègre pip , virtualenv et même pyenv si vous le souhaitez. Les seuls outils qui sont de véritables alternatives les uns aux autres sont ici venv et virtualenv .

Recommandation pour les débutants:

C’est ma recommandation personnelle pour les débutants: commencez par apprendre à virtualenv et pip , des outils fonctionnant à la fois avec Python 2 et 3 et dans diverses situations, puis choisissez les autres outils dès que vous en aurez besoin.


Je voudrais juste éviter l'utilisation de virtualenv après Python3.3 + et utiliser à la place la bibliothèque standard livrée venv . Pour créer un nouvel environnement virtuel, tapez:

$ python3 -m venv <MYVENV>  

virtualenv essaie de copier le binaire Python dans le répertoire bin de l'environnement virtuel. Cependant, il ne met pas à jour les liens de fichier de bibliothèque incorporés dans ce binaire. Par conséquent, si vous construisez Python à partir de la source dans un répertoire non-système avec des noms de chemin relatifs, le binaire Python sera interrompu. Puisque c’est ainsi que vous créez une copie distribuable en Python, c’est un gros défaut. BTW pour inspecter les liens de fichiers de bibliothèque incorporés sous OS X, utilisez otool . Par exemple, dans votre environnement virtuel, tapez:

$ otool -L bin/python
python:
    @executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)

Par conséquent, je voudrais éviter virtualenvwrapper et pipenv . pyvenv est obsolète. pyenv semble être utilisé souvent là où virtualenv est utilisé, mais je resterais à l'écart aussi, car je pense que venv aussi ce pyenv quoi pyenv est conçu.

venv crée dans le shell des environnements virtuels frais et en bac à sable , dotés de bibliothèques installables par l' utilisateur et sans danger pour plusieurs pythons . Comme les environnements virtuels ne commencent que par les bibliothèques standard livrées avec Python, vous devez réinstaller toutes les autres bibliothèques avec pip install lorsque l'environnement virtuel est actif. Sandboxed car aucune de ces nouvelles installations de bibliothèque n'est visible en dehors de l'environnement virtuel. Vous pouvez donc supprimer tout l'environnement et recommencer sans craindre aucun impact sur votre installation Python de base. Bibliothèques installables par l'utilisateur, car le dossier cible de l'environnement virtuel est créé sans sudo dans un répertoire que vous possédez déjà. Vous n'avez donc pas besoin des autorisations sudo pour y installer des bibliothèques. Enfin, il est sécurisé multi-python , car lors de l'activation des environnements virtuels, le shell ne voit que la version python (3.4, 3.5, etc.) utilisée pour créer cet environnement virtuel.

pyenv est similaire à venv en ce sens qu'il vous permet de gérer plusieurs environnements python. Cependant, avec pyenv vous ne pouvez pas facilement pyenv installation de bibliothèques à un certain état de démarrage et vous aurez probablement besoin de privilèges d’ admin à un moment donné pour mettre à jour les bibliothèques. Donc, je pense qu'il est également préférable d'utiliser venv .

Ces dernières années, j'ai rencontré de nombreux problèmes dans les systèmes de construction (packages emacs, développeurs d'applications autonomes python, installateurs, etc.) qui virtualenv par se virtualenv à des problèmes avec virtualenv . Je pense que python sera une meilleure plate-forme lorsque nous éliminerons cette option supplémentaire et n’utilisons que venv .





python-venv