web-dev-qa-db-fra.com

Utiliser une version différente de Python avec virtualenv

J'ai un système Debian en cours d'exécution avec python 2.5.4. J'ai correctement installé virtualenv, tout fonctionne bien. Est-il possible que je puisse utiliser virtualenv avec une version différente de Python?

J'ai compilé Python 2.6.2 et je voudrais l'utiliser avec virtualenv. Est-ce suffisant pour écraser le fichier binaire? Ou dois-je changer quelque chose en ce qui concerne les bibliothèques?

955
Ulf

Utilisez simplement l’option --python (ou l’option -p courte) lors de la création de votre instance virtualenv pour spécifier l’exécutable Python que vous souhaitez utiliser, par exemple:

virtualenv --python=/usr/bin/python2.6 <path/to/new/virtualenv/>

N.B. Pour Python 3.3 ou une version ultérieure, reportez-vous à la section Aelfinn's réponse ci-dessous.

1386
Daniel Roseman

UPDATE: Pour Python3.6, le script ci-dessous pyvenv est obsolète. Au lieu de cela, le Python Docs suggère créant l'environnement virtuel avec la commande suivante:

python3 -m venv <myenvname>

Pour python3 (3.3+), utilisez la méthode ci-dessus ou la commande scriptpyvenv.

pyvenv /path/to/new/virtual/environment

Veuillez noter que venv ne permet pas de créer virtualenv avec d'autres versions de Python. Pour cela, installez et utilisez le virtualenvpackage .

218
The Aelfinn

Voici les étapes à suivre lorsque vous êtes sur un environnement d'hébergement partagé et que vous devez installer et vous conformer à Python à partir du code source, puis créer venv à partir de votre version Python. Pour Python 2.7.9, vous feriez quelque chose dans ce sens:

mkdir ~/src
wget http://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
tar -zxvf Python-2.7.9.tgz
cd Python-2.7.9
mkdir ~/.localpython
./configure --prefix=$HOME/.localpython
make
make install

env virtuel

cd ~/src
wget https://pypi.python.org/packages/5c/79/5dae7494b9f5ed061cff9a8ab8d6e1f02db352f3facf907d9eb614fb80e9/virtualenv-15.0.2.tar.gz#md5=0ed59863994daf1292827ffdbba80a63
tar -zxvf virtualenv-15.0.2.tar.gz
cd virtualenv-15.0.2/
~/.localpython/bin/python setup.py install
virtualenv ve -p $HOME/.localpython/bin/python2.7
source ve/bin/activate   

Naturellement, cela peut s'appliquer à toute situation dans laquelle vous souhaitez répliquer l'environnement exact sur lequel vous travaillez et sur lequel vous déployez.

174
zzart
virtualenv --python=/usr/bin/python2.6 <path/to/myvirtualenv>
96
iElectric

Il y a un moyen plus facile,

virtualenv venv --python=python2.7

Grâce à un commentaire, cela ne fonctionne que si vous avez installé python2.7 au niveau du système (par exemple, /usr/bin/python2.7).

Sinon, si vous utilisez homebrew, vous pouvez utiliser le chemin pour vous donner ce que vous voulez.

virtualenv venv --python=/usr/local/bin/python

Vous pouvez trouver le chemin de votre installation python avec

which python

Cela fonctionnera également avec python 3.

which python3
>> /usr/local/bin/python3
virtualenv venv --python=/usr/local/bin/python3

En fin de compte condenser à:

virtualenv venv -p `which python`
virtualenv venv -p `which python3`
84
Daniel Lee

Sous Windows pour moi cela fonctionne:

virtualenv --python=c:\Python25\python.exe envname

sans le python.exe j'ai WindowsError: [Error 5] Access is denied j'ai installé Python2.7.1 avec virtualenv 1.6.1 et je voulais python 2.5.2.

68
balazs

Mac OSX 10.6.8 (Snow Leopard):

1) Lorsque vous exécutez pip install virtualenv, la commande pip est associée à l'une de vos versions python, et virtualenv est installé dans cette version de python. Tu peux faire

 $ which pip   

pour voir quelle version de python c'est-à-dire. Si vous voyez quelque chose comme:

 $ which pip
 /usr/local/bin/pip

alors fais:

$ ls -al /usr/local/bin/pip
lrwxrwxr-x  1 root  admin  65 Apr 10  2015 /usr/local/bin/pip ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip

Vous pouvez voir la version python dans la sortie.

Par défaut, ce sera la version de python utilisée pour tout nouvel environnement que vous créez. Cependant, vous pouvez spécifier toute version de python installée sur votre ordinateur à utiliser dans un nouvel environnement avec le -p flag:

$ virtualenv -p python3.2 my_env  
Running virtualenv with interpreter /usr/local/bin/python3.2  
New python executable in my_env/bin/python  
Installing setuptools, pip...done.  

virtualenv my_env créera un dossier dans le répertoire actuel qui contiendra les fichiers exécutables Python, ainsi qu'une copie de la commande pip [commande] que vous pourrez utiliser pour installer d'autres packages.

http://docs.python-guide.org/en/latest/dev/virtualenvs/

virtualenv copie simplement python d'un emplacement de votre ordinateur dans le répertoire my_env/bin/nouvellement créé.

2) Le système python est dans /usr/bin, tandis que les différentes versions de python que j'ai installées ont été installées par défaut dans:

 /usr/local/bin

3) Les différents pythons que j'ai installés portent des noms tels que python2.7 ou python3.2, et je peux utiliser ces noms plutôt que des chemins complets.

======== VIRTUALENVWRAPPER =========

1) J'ai eu quelques problèmes à faire fonctionner virtualenvwrapper. C'est ce que j'ai fini par mettre dans ~/.bash_profile:

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Django_projects  #Not very important -- mkproject command uses this
#Added the following based on: 
#http://stackoverflow.com/questions/19665327/virtualenvwrapper-installation-snow-leopard-python
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python2.7 
#source /usr/local/bin/virtualenvwrapper.sh
source /Library/Frameworks/Python.framework/Versions/2.7/bin/virtualenvwrapper.sh

2) -p option fonctionne différemment avec virtualenvwrapper: je dois spécifier le chemin complet de l'interpréteur python à utiliser dans le nouvel environnement (lorsque je ne souhaite pas utiliser le paramètre par défaut python version):

$ mkvirtualenv -p /usr/local/bin/python3.2 my_env
Running virtualenv with interpreter /usr/local/bin/python3
New python executable in my_env/bin/python
Installing setuptools, pip...done.
Usage: source deactivate

removes the 'bin' directory of the environment activated with 'source
activate' from PATH. 

À la différence de virtualenv, virtualenvwrapper créera l'environnement à l'emplacement spécifié par la variable d'environnement $ WORKON_HOME. Cela garde tous vos environnements au même endroit.

29
7stud

Supposons que vous avez actuellement python 2.7 installé dans votre virtualenv. Mais vous voulez utiliser python3.2, vous devrez le mettre à jour avec:

$ virtualenv --python=/usr/bin/python3.2 name_of_your_virtualenv

Puis activez votre virtualenv en:

$ source activate name_of_your_virtualenv

puis faites: python --version dans Shell pour vérifier si votre version est maintenant mise à jour.

21
kmario23

Ces deux commandes devraient bien fonctionner pour un débutant

virtualenv -p python2 myenv (pour python2)

virtualenv -p python3 myenv (pour python3)

15
Sachin Kolige

Vous pouvez appeler virtualenv avec python version que vous voulez. Par exemple:

python3 -m virtualenv venv

Ou alternativement, pointez directement sur votre chemin virtuel. par exemple. Pour les fenêtres:

c:\Python34\Scripts\virtualenv.exe venv

Et en courant:

venv/bin/python

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

vous pouvez voir la version python installée dans un environnement virtuel

10
Nima Soroush

L'approche -p fonctionne bien, mais vous devez vous rappeler de l'utiliser à chaque fois. Si votre objectif est de passer à une version plus récente de Python, c'est généralement pénible et peut également entraîner des erreurs.

Votre autre option consiste à définir une variable d’environnement faisant la même chose que -p. Définissez ceci via votre fichier ~/.bashrc ou n'importe où vous gérez des variables d'environnement pour vos sessions de connexion:

export VIRTUALENV_PYTHON=/path/to/desired/version

Ensuite, virtualenv l'utilisera chaque fois que vous ne spécifiez pas -p sur la ligne de commande.

9
Chris Johnson

Pour Mac (High Sierra), installez virtualenv sur python3 et créez un virtualenv pour python2:

 $ python3 -m pip install virtualenv
 $ python3 -m virtualenv --python=python2 vp27
 $ source vp27/bin/activate
 (vp27)$ python --version
 Python 2.7.14
8
Zihao Zhao

Encore plus facilement, en utilisant la substitution de commande pour trouver python2 pour vous:

virtualenv -p $(which python2) <path/to/new/virtualenv/>

Ou lorsque vous utilisez virtualenvwrapper:

mkvirtualenv -p $(which python2) <env_name>

7
Gerard

Sur le Mac, j'utilise pyenv et virtualenvwrapper. Je devais créer un nouveau virtualenv. Vous avez besoin d'un homebrew que je suppose que vous avez installé si vous êtes sur un Mac, mais juste pour le plaisir:

Ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


brew install pyenv
pyenv install 2.7.10
pyenv global 2.7.10
export PATH=/Users/{USERNAME}/.pyenv/versions/2.7.10/bin:$PATH
mkvirtualenv -p ~/.pyenv/versions/2.7.10/bin/python  {virtual_env_name}

J'ai également d'abord gelé mes exigences afin de pouvoir simplement réinstaller dans le nouveau virtualenv avec:

pip install -r requirements.txt
6
silverdagger

Dans le sous-système Windows pour Linux:

  1. Créer un environnement pour python3:

    virtualenv --python=/usr/bin/python3 env
    
  2. Activez le:

    source env/bin/activate
    
4
Marcin Rapacz

Oui, les réponses ci-dessus sont correctes et fonctionnent parfaitement sur les systèmes Unix tels que Linux & MAC OS X.

J'ai essayé de créer virtualenv pour Python2 & Python avec les commandes suivantes.

Ici, j'ai utilisé venv2 & venv comme noms respectifs pour Python2 & Python.

Python2 "

MacBook-Pro-2:~ admin$ virtualenv venv2 --python=`which python2`
Running virtualenv with interpreter /usr/local/bin/python2
New python executable in /Users/admin/venv2/bin/python
Installing setuptools, pip, wheel...done.
MacBook-Pro-2:~ admin$ 
MacBook-Pro-2:~ admin$ ls venv2/bin/
activate        easy_install        pip2.7          python2.7
activate.csh        easy_install-2.7    python          wheel
activate.fish       pip         python-config
activate_this.py    pip2            python2
MacBook-Pro-2:~ admin$ 

Python3 "

MacBook-Pro-2:~ admin$ virtualenv venv3 --python=`which python3`
Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/admin/venv3/bin/python3
Also creating executable in /Users/admin/venv3/bin/python
Installing setuptools, pip, wheel...done.
MacBook-Pro-2:~ admin$ 
MacBook-Pro-2:~ admin$ ls venv3/bin/
activate        easy_install        pip3.6          python3.6
activate.csh        easy_install-3.6    python          wheel
activate.fish       pip         python-config
activate_this.py    pip3            python3
MacBook-Pro-2:~ admin$ 

Vérification de Python emplacements d'installation

MacBook-Pro-2:~ admin$ which python2
/usr/local/bin/python2
MacBook-Pro-2:~ admin$ 
MacBook-Pro-2:~ admin$ which python3
/usr/local/bin/python3
MacBook-Pro-2:~ admin$ 
3
hygull

Sur les fenêtres:

py -3.4x32 -m venv venv34

ou

py -2.6.2 -m venv venv26

Ceci utilise le py launcher qui trouvera le bon exécutable python pour vous (en supposant qu'il soit installé).

2
jnnnnn

Cela a fonctionné pour moi

Sudo apt-get install python3-minimal

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

Lien vers Création de virtualenv

1
Aseem

Pour les systèmes Debian (debian 9) en 2019, j'ai découvert une solution simple qui pourrait résoudre le problème à partir de l'environnement virtuel.

Supposons que l'environnement virtuel ait été créé via:

python3.7 -m venv myenv

mais ne possède que les versions de python2 et python2.7, et vous avez besoin des fonctionnalités récentes de python3.7.

Ensuite, exécutez simplement la commande:

(myvenv) $ python3.7 -m venv --upgrade /home/username/path/to/myvenv/

ajoutera les paquets python3.7 s’ils sont déjà disponibles sur votre système.

1
David M. Golembiowski

C'était un bug avec virtualenv. La mise à niveau de votre pip devrait être la solution.

pip install --upgrade virtualenv

1
Mohit

Oui, il vous suffit d'installer l'autre version de python et de définir l'emplacement de votre autre version de python dans votre commande, comme suit:

virtualenv/home/paie/Documents/env -p/usr/bin/python3

0
Nitin Nath Giri

J'utilise pyenv pour gérer ma version python.

pyenv install 3.7.3
pyenv local 3.7.3

Vérifiez votre version python:

$ python --version
Python 3.7.3

Créez l'environnement virtuel avec venv :

python -m venv .

Activez ensuite l'environnement virtuel:

source bin/activate

Vérifiez votre version python:

$ python --version
Python 3.7.3

Vous devrez peut-être supprimer l'environnement virtuel précédent

rm -rf bin
0
brandonbanks

Cela a fonctionné pour moi sous Windows avec l’installation de python 2:

  1. Étape 1: Installez la version python 3.
  2. Étape 2: créez un dossier env pour l'environnement virtuel.
  3. Étape 3: c:\Python37\python -m venv c:\chemin\to\env.

C’est ainsi que j’ai créé l’environnement virtuel Python 3 sur mon installation existante python 2.

0
user11118940

Vous pouvez le faire en faisant ceci:

virtualenv -p python3 .
0
Krishna Kamal