Utilisation de Python 3 dans virtualenv

781

En utilisant virtualenv , je lance mes projets avec la version par défaut de Python (2.7). Sur un projet, j'ai besoin d'utiliser Python 3.4.

Je l'ai brew install python3installé sur mon Mac. Maintenant, comment créer un virtualenv qui utilise la nouvelle version?

par exemple sudo virtualenv envPython3

Si j'essaye:

virtualenv -p python3 test

Je reçois:

Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.4.0_1/Frameworks/Python.framework/Versions/3.4'
New python executable in test/bin/python3.4
Also creating executable in test/bin/python
Failed to import the site module
Traceback (most recent call last):
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/site.py", line 67, in <module>
    import os
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/os.py", line 634, in <module>
    from _collections_abc import MutableMapping
ImportError: No module named '_collections_abc'
ERROR: The executable test/bin/python3.4 is not functioning
ERROR: It thinks sys.prefix is '/Users/user/Documents/workspace/test' (should be '/Users/user/Documents/workspace/test/test')
ERROR: virtualenv is not compatible with this system or executable
Prométhée
la source
1
avez-vous essayé de mettre à jour l'interpréteur uniquement dans votre environnement actuel ou avez-vous simplement décidé de recommencer à zéro?
Charlie Parker
Est-il possible d'installer uniquement python3 dans un environnement virtuel sans mettre à jour le système python (en conservant python2.x) sur mac?
juin

Réponses:

1386

il suffit de courir

virtualenv -p python3 envname

Mise à jour après l'édition d'OP:

Il y avait un bogue dans la version OP de virtualenv, comme décrit ici . Le problème a été résolu en exécutant:

pip install --upgrade virtualenv
tbrisker
la source
17
La mise à niveau de virtualenv a fonctionné, mais pour une raison quelconque, j'ai également dû être explicite sur l'exécutable python3 avecvirtualenv -p $(which python3) envname
dkamins
2
est-il possible de simplement changer l'interpréteur python de l'environnement actuel plutôt que de créer un nouvel environnement?
Charlie Parker
Sur Raspbian Jessie 'virtualenv --no-site-packages python3.4' fonctionnait. --distribute est obsolète et -p ne semble pas nécessaire car virtualenv utilise python3.
alkopop79
Pourquoi est-il qu'après l'exécution virtualenv -p python3 my_virtual_env, python3est également accessible de l'extérieur de l'environnement virtuel?
Bishwas Mishra
@CharlieParker Vous pouvez effectuer les deux étapes suivantes dans l' ordre: 1. Supprimer les bin, lib, include, localet sharerépertoires dans le répertoire racine de votre projet. 2. Dans l'exécution du terminal: virtualenv -p python3 .qui initialise un nouveau virtualenv Python3 dans le répertoire courant.
Calleniah
251

Python 3 a un support intégré pour les environnements virtuels - venv . Il serait peut-être préférable de l'utiliser à la place. Se référant aux documents:

La création d'environnements virtuels se fait en exécutant le script pyvenv:

pyvenv /path/to/new/virtual/environment

Mise à jour pour Python 3.6 et plus récent:

Comme pawciobiel correctement les commentaires , pyvenvest dépréciée à partir de Python 3.6 et la nouvelle façon est:

python3 -m venv /path/to/new/virtual/environment
geckon
la source
2
j'espère que vous avez raison puisque je viens de quitter virtualenv pour travailler avec pyenv avec python 3.5.2
Jayesh
1
Je n'ai trouvé aucune information confirmant les problèmes liés à l'emplacement, le relocalisable a été supprimé en option .... est-il maintenant inutile? est-ce une solution de contournement? ou est-il tout à fait inutile de préparer une application?
JM Becker
7
Exactement mais vous pouvez également exécuter: python3 -m venv /path/v3puisque le script pyvenv est obsolète depuis Python 3.6.
pawciobiel
4
en utilisant la dernière version anaconda python 3.6 sur mac, et les python3 -m venv /path/v3erreurs ici. Error: Command '['/path/v3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exitSuis-je en train de manquer quelque chose? Avec l' --without-pipoption, il crée au moins correctement le venv avec des scripts d'activation / désactivation.
monkut
3
Tout le monde sait comment activer un python3.6 -m venv <venvname>. Il n'y a aucun Scripts / dans le répertoire créé, ni "activer" dans le bin / subdir.
Shayne
60

J'ai essayé pyenv et c'est très pratique pour changer de version python (globale, locale dans un dossier ou dans le virtualenv):

brew install pyenv

puis installez la version Python que vous souhaitez:

pyenv install 3.5.0

et créez simplement virtualenv avec le chemin vers la version d'interpréteur nécessaire:

virtualenv -p /Users/johnny/.pyenv/versions/3.5.0/bin/python3.5 myenv

Voilà, vérifiez la version:

. ./myenv/bin/activate && python -V

Il existe également un plugin pour pyenv pyenv-virtualenv mais cela n'a pas fonctionné pour moi.

Johnner
la source
il semble que votre méthode nécessite de créer un nouvel environnement python. Pyenv peut-il fonctionner avec virtualenv et changer simplement ma version python quand je veux?
Charlie Parker
58

Installez les prérequis.

sudo apt-get install python3 python3-pip virtualenvwrapper

Créez un environnement virtuel basé sur Python3. Activez éventuellement l' --system-site-packagesindicateur.

mkvirtualenv -p /usr/bin/python3 <venv-name>

Situé dans l'environnement virtuel.

workon <venv-name>

Installez d'autres exigences à l'aide du pipgestionnaire de packages.

pip install -r requirements.txt
pip install <package_name>

Lorsque vous travaillez sur plusieurs projets python simultanément, il est généralement recommandé d'installer des packages communs comme pdbppglobalement, puis de les réutiliser dans virtualenvs.

L'utilisation de cette technique permet d'économiser beaucoup de temps sur la récupération et l'installation de packages, en plus de consommer un minimum d'espace disque et de bande passante réseau.

sudo -H pip3 -v install pdbpp
mkvirtualenv -p $(which python3) --system-site-packages <venv-name>

Instructions spécifiques à Django

S'il y a beaucoup de packages python à l'échelle du système, il est recommandé de ne pas utiliser --system-site-packagesflag en particulier pendant le développement car j'ai remarqué que cela ralentit beaucoup le démarrage de Django. Je suppose que l'initialisation de l'environnement Django analyse et ajoute manuellement tous les packages de site à partir du chemin système, ce qui pourrait être la raison. Même python manage.py shelldevient très lent.

Cela dit, quelle option fonctionne mieux. Pourrait être sûr de simplement sauter l' --system-site-packagesindicateur pour les projets Django.

Sandeep
la source
1
J'ai appliqué cela à OSX, cela a fonctionné (sauf qu'il ne l'a pas utilisé, apt-getmais brew)
sdkks
38
virtualenv --python=/usr/bin/python3 <name of env>

travaillé pour moi.

bewithaman
la source
J'ai essayé mais on me dit The executable python3 (from --python=python3) does not exist, que feriez-vous? Je voulais brasser isntall python3 mais je ne savais pas si c'était une bonne idée ou si mon système se confondrait avec la version python que j'utilise
Charlie Parker
Fonctionne comme un charme dans Ubuntu 16.04!
Eric Vieira
20

Vous pouvez spécifier une version spécifique de Python lors de la création de l'environnement.
Il est mentionné dans virtualenv.py

virtualenv --python=python3.5 envname

Dans certains cas, cela doit être le chemin d'accès complet à l'exécutable:

virtualenv --python=/Users/username/.pyenv/versions/3.6.0/bin/python3.6 envname

Comment -pfonctionne

parser.add_option(
    '-p', '--python',
    dest='python',
    metavar='PYTHON_EXE',
    help='The Python interpreter to use, e.g., --python=python3.5 will use the python3.5 '
    'interpreter to create the new environment.  The default is the interpreter that '
    'virtualenv was installed with (%s)' % sys.executable)
Kiran Jasvanee
la source
c'est la meilleure réponse ici
Collier
14

J'avais le même ERRORmessage. La solution de tbrisker n'a pas fonctionné dans mon cas. Au lieu de cela, cela a résolu le problème:

$ python3 -m venv .env
Aziz Alto
la source
13

C'est tout ce dont vous avez besoin pour exécuter un environnement virtuel en python / python3

D'abord s'il virtualenvn'est pas installé, exécutez

pip3 install virtualenv 

Maintenant exécuté:

virtualenv -p python3 <env name> 

Parfois, la cmd virtualenvéchoue, si c'est le cas, utilisez ceci:

python3 -m virtualenv <env_name>  # you can specify full path instead <env_name> to install the file in a different location other than the current location

Activez maintenant l'environnement virtuel:

source <env_name>/bin/activate

Ou:

source `pwd`/<env_name>/bin/activate

Maintenant, lancez

which python

Vous devriez voir le chemin complet vers votre répertoire et votre <env_name>/bin/pythonsuffixe

Pour quitter virtualenv, exécutez:

deactivate 
Kohn1001
la source
8

Python est désormais livré avec sa propre implémentation d'environnement virtuel, sous le nom de "venv". Je suggère d'utiliser cela au lieu de virtualenv.

Citant de venv - docs ,

Déconseillé depuis la version 3.6: pyvenv était l'outil recommandé pour créer des environnements virtuels pour Python 3.3 et 3.4, et est déconseillé dans Python 3.6.

Modifié dans la version 3.5: L'utilisation de venv est maintenant recommandée pour créer des environnements virtuels.

Pour Windows, pour lancer venv sur un projet, ouvrez cmd:

python -m venv "c:\path\to\myenv"

(Suggère d'utiliser des guillemets doubles autour du chemin du répertoire s'il contient des espaces. Ex: "C: / My Dox / Spaced Directory / Something")

Une fois que venv est configuré, vous verrez de nouveaux dossiers dans votre répertoire de projet. L'un d'eux serait "Scripts".

Pour activer ou invoquer le venv, vous avez besoin de:

C:\> <venv>\Scripts\activate.bat

Vous pouvez désactiver un environnement virtuel en tapant "désactiver" dans votre shell. Avec cela, vous êtes maintenant prêt à installer les bibliothèques spécifiques à votre projet, qui résideront dans le dossier "Lib".

================================ Edit 1 ================ ==================== Le scénario qui sera discuté ci-dessous n'est pas ce qui a été demandé à l'origine, il suffit de l'ajouter au cas où quelqu'un utiliserait vscode avec l'extension python

Dans le cas où vous utilisez vs code avec son extension python, vous pourriez rencontrer un problème avec son pylint qui pointe vers l'installation globale. Dans ce cas, pylint ne pourra pas voir les modules installés dans votre environnement virtuel et affichera donc des erreurs lors de l'importation.

Voici une méthode simple pour surmonter cela.

cd Workspace\Scripts
.\Activate.ps1
code .

Nous activons essentiellement l'environnement d'abord, puis nous invoquons le code vs pour que pylint démarre dans l'environnement et puisse voir tous les packages locaux.

Flamber
la source
J'utilise virtualenvpour une utilisation quotidienne des environnements virtuels ( workon, etc.), mais pour la création fiable de nouveaux environnements virtuels, python3.xc'est le seul moyen que j'ai trouvé qui fonctionne.
Bobble
6

En plus des autres réponses, je recommande de vérifier quelle instance de virtualenv vous exécutez:

which virtualenv

Si cela s'avère quelque chose dans / usr / local / bin, il est possible - même probable - que vous ayez installé virtualenv (éventuellement en utilisant une instance de easy_tools ou pip) sans utiliser le gestionnaire de paquets de votre système (brew dans le cas de OP). C'était mon problème.

Il y a des années - quand j'étais encore plus ignorant - j'avais installé virtualenv et il masquait virtualenv fourni par le package de mon système.

Après avoir supprimé cet ancien virtualenv cassé, mes problèmes ont disparu.

sauge
la source
6

En python3.6, j'ai essayé python3 -m venv myenv, selon la documentation, mais cela prenait tellement de temps. Donc, la commande très simple et rapide est python -m venv yourenv Cela a fonctionné pour moi sur python3.6.

Sujeet Agrahari
la source
5

Sur Mac, je devais faire ce qui suit pour le faire fonctionner.

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere
Stryker
la source
Pour trouver exactement où se trouve votre version python souhaitée, utilisez l'emplacement which python2.7ou which python3.5ou which python3.6, puis remplacez le about--python=DIRECTORY
Santhosh
3

Si vous installez python3 ( brew install python3) avec virtualenv burrito , vous pouvez alors faire mkvirtualenv -p $(which python3) env_name

Bien sûr, je sais que le burrito virtualenv n'est qu'un emballage, mais il m'a bien servi au fil des ans, réduisant certaines courbes d'apprentissage.

Antony
la source
3

virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME> cela ajoutera le chemin python3 pour votre environnement virtuel.

Hardik Gajjar
la source
2

Ça a marché pour moi

virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3
Dadaso Zanzane
la source
2

Pour ceux qui ont des problèmes en travaillant avec Anaconda3 (Python 3).

Vous pourriez utiliser

conda create -n name_of_your_virtualenv python=python_version 

Pour activer l'environnement (Linux, MacOS)

source activate name_of_your_virtualenv

Pour les fenêtres

activate name_of_your_virtualenv
jkhosla
la source
1

J'ai essayé toutes les choses ci-dessus, cela n'a toujours pas fonctionné. Donc, en tant que force brute, je viens de réinstaller l'anaconda, de réinstaller le virtualenv ... et cela a fonctionné.

Amans-MacBook-Pro:~ amanmadan$ pip install virtualenv
You are using pip version 6.1.1, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting virtualenv
  Downloading virtualenv-15.0.3-py2.py3-none-any.whl (3.5MB)
    100% |████████████████████████████████| 3.5MB 114kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-15.0.3
Amans-MacBook-Pro:python amanmadan$ virtualenv my_env
New python executable in /Users/amanmadan/Documents/HadoopStuff/python/my_env/bin/python
Installing setuptools, pip, wheel...done.
Amans-MacBook-Pro:python amanmadan$ 
Aman Madan
la source
1

Je voulais garder python 2.7.5 comme version par défaut sur Centos 7 mais avoir python 3.6.1 dans un environnement virtuel fonctionnant aux côtés d'autres environnements virtuels en python 2.x

J'ai trouvé le lien ci-dessous la meilleure solution pour la dernière version de python (python 3.6.1) https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming -environnement-pour-python-3 . Il montre les étapes pour différentes plates-formes mais les étapes de base sont

  1. Installez python3.x (s'il n'est pas présent) pour votre plateforme
  2. Installez python3.x-devel pour votre plateforme
  3. Créer un environnement virtuel dans python 3.x (par exemple $ python3.6 -m venv virenv_test_p3 /)
  4. Activez l'environnement de test pour python 3.x (par exemple source virenv_test_p3 / bin / activate)
  5. Installez les packages que vous souhaitez utiliser dans votre nouvel environnement virtuel python 3 et qui sont pris en charge (par exemple pip install Django == 1.11.2)
Gunnar Sigfusson
la source
1

Les commandes simples ci-dessous peuvent créer un env virtuel avec la version 3.5

apt-get install python3-venv

python3.5 -m venv <your env name>

si vous voulez une version virtuelle env 3.6

python3.6 -m venv <your env name>
Hariharan AR
la source
1

Pour ceux d'entre vous qui utilisent pipenv et qui souhaitent installer une version spécifique:

pipenv install --python 3.6
Vlad Bezden
la source
0

J'ai la même erreur car il y a un conflit avec l'installation de miniconda3, donc lorsque vous tapez "which virtualenv" et si vous avez installé miniconda et qu'il pointe vers cette installation, vous pouvez le supprimer (si vous m'aimez et que vous n'avez pas bougé) encore) ou modifiez votre variable d'environnement pour pointer vers l'installation souhaitée.

PrincessPea
la source
0

Sur la ligne de commande Windows, ce qui suit a fonctionné pour moi. Découvrez d'abord où se trouvent vos exécutables python:

where python

Cela produira les chemins vers les différents python.exe sur votre système. Voici les miens:

C:\Users\carandangc\Anaconda3\python.exe
C:\Python27\python.exe

Donc, pour Python3, cela se trouvait dans le premier chemin pour moi, donc je cd dans le dossier racine de l'application où je veux créer un dossier d'environnement virtuel. Ensuite, j'exécute ce qui comprend le chemin d'accès à mon exécutable Python3, en nommant mon environnement virtuel «venv»:

virtualenv --python=/Users/carandangc/Anaconda3/python.exe venv

Ensuite, activez l'environnement virtuel:

call venv\Scripts\activate.bat

Enfin, installez les dépendances pour cet environnement virtuel:

pip install -r requirements.txt

Ce fichier requirements.txt peut être rempli manuellement si vous connaissez les bibliothèques / modules nécessaires à votre application dans l'environnement virtuel. Si vous aviez l'application en cours d'exécution dans un autre environnement, vous pouvez alors produire automatiquement les dépendances en exécutant ce qui suit (cd dans le dossier de l'application dans l'environnement où elle fonctionne):

pip freeze > requirements.txt

Ensuite, une fois que vous avez le fichier requirements.txt que vous avez «gelé», vous pouvez installer les exigences sur une autre machine ou un environnement propre avec ce qui suit (après le cd dans le dossier d'application):

pip install -r requirements.txt

Pour voir votre version python dans l'environnement virtuel, exécutez:

python --version

Alors voila ... vous avez votre Python3 en cours d'exécution dans votre environnement virtuel. Sortie pour moi:

Python 3.7.2
Carlo Carandang
la source