122

I installed python 3.3.1 on ubuntu lucid and successfully created a virtualenv as below

virtualenv envpy331 --python=/usr/local/bin/python3.3

this created a folder envpy331 on my home dir.

I also have virtualenvwrapper installed.But in the docs only 2.4-2.7 versions of python are supported..Has anyone tried to organize the python3 virtualenv ? If so, can you tell me how ?

Jonathan
  • 8,453
  • 9
  • 51
  • 74
damon
  • 8,127
  • 17
  • 69
  • 114
  • 1
    The problem with that is that pip is still the python2 pip, isn't it? I think what you want is virtualenvwrapper to use `pyvenv` instead of `virtualenv` – erikbstack May 27 '15 at 12:53

9 Answers9

253

If you already have python3 installed as well virtualenvwrapper the only thing you would need to do to use python3 with the virtual environment is creating an environment using:

which python3 #Output: /usr/bin/python3
mkvirtualenv --python=/usr/bin/python3 nameOfEnvironment

Or, (at least on OSX using brew):

mkvirtualenv --python=`which python3` nameOfEnvironment

Start using the environment and you'll see that as soon as you type python you'll start using python3

rattray
  • 5,174
  • 1
  • 33
  • 27
Jonathan
  • 8,453
  • 9
  • 51
  • 74
  • 12
    Didn't quite work for me on OSX with 2.7.8 and 3.4.1 installed side-by-side via brew. Modifying it to "mkvirtualenv --python=\`which python3\` nameOfEnvironment" worked perfectly, though. – Chris Doggett Aug 13 '14 at 14:43
  • @ChrisDoggett same on Ubuntu 14.10. – z0r Mar 06 '15 at 04:04
  • 4
    On Ubuntu the command will be: mkvirtualenv --python=/usr/bin/python3 your-env-name – Vasiliy Toporov Mar 18 '15 at 10:21
  • 2
    If you use bash, you can do substitution to save a line - `mkvirtualenv --python=$(which python3) nameOfEnvironment` – d4nyll Feb 23 '17 at 11:56
  • what's really great is to create the following bash alias `alias mkvirtualenv3="mkvirtualenv --python=$(which python3.6)"` - then it's easy to create virtualenvs for python 2 or 3 – rjmoggach Jan 25 '18 at 03:47
  • If you want to use `which python3` or `$(which python3)` make sure you ARE NOT in another virtualenv -- or you'll get a virtual path to python 3 which isn't really what you want, i.e. `~/.virtualenvs/the_other_env/bin/python3` – Mark Chackerian Mar 01 '18 at 23:26
  • I'm getting error `ImportError: No module named virtualenv`. I have python 3.7 installed beside python 2.7.15 – Mikebarson Nov 08 '18 at 04:58
  • @Mikebarson You have to pip install virtualenv, it's not a built in module. – Jonathan Nov 08 '18 at 08:55
53

You can make virtualenvwrapper use a custom Python binary instead of the one virtualenvwrapper is run with. To do that you need to use VIRTUALENV_PYTHON variable which is utilized by virtualenv:

$ export VIRTUALENV_PYTHON=/usr/bin/python3
$ mkvirtualenv -a myproject myenv
Running virtualenv with interpreter /usr/bin/python3
New python executable in myenv/bin/python3
Also creating executable in myenv/bin/python
(myenv)$ python
Python 3.2.3 (default, Oct 19 2012, 19:53:16) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Iliyan Bobev
  • 3,070
  • 2
  • 20
  • 24
  • 2
    This is effectively out of date. Rather than setting an environment variable you should use the --python parameter that is currently suggested by Jonathan. – AlexLordThorsen Jan 26 '15 at 23:14
  • 6
    @Rawrgulmuffins Why? This prevents having to specify the python version for each new env. – Joost Apr 22 '15 at 10:47
  • @Joost That's a fair point. I personally feel like that's a downside but I can see why people would prefer that. – AlexLordThorsen Apr 22 '15 at 18:01
27

The latest version of virtualenvwrapper is tested under Python3.2. Chances are good it will work with Python3.3 too.

unutbu
  • 842,883
  • 184
  • 1,785
  • 1,677
23

On Ubuntu; using mkvirtualenv -p python3 env_name loads the virtualenv with python3.

Inside the env, use python --version to verify.

akashbw
  • 1,168
  • 12
  • 18
22

virtualenvwrapper now lets you specify the python executable without the path.

So (on OSX at least)mkvirtualenv --python=python3 nameOfEnvironment will suffice.

Peter Yin
  • 221
  • 2
  • 4
22

You can add this to your .bash_profile or similar:

alias mkvirtualenv3='mkvirtualenv --python=`which python3`'

Then use mkvirtualenv3 instead of mkvirtualenv when you want to create a python 3 environment.

dstandish
  • 2,328
  • 18
  • 34
13

I find that running

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

and

export VIRTUALENVWRAPPER_VIRTUALENV=/usr/bin/virtualenv-3.4

in the command line on Ubuntu forces mkvirtualenv to use python3 and virtualenv-3.4. One still has to do

mkvirtualenv --python=/usr/bin/python3 nameOfEnvironment

to create the environment. This is assuming that you have python3 in /usr/bin/python3 and virtualenv-3.4 in /usr/local/bin/virtualenv-3.4.

CuriousGeorge
  • 471
  • 3
  • 6
  • Just use `which python2.4` or `which python3.5` or `which python3.6` to find the directory for `--python=DIRECTORY` – Santhosh Mar 08 '18 at 09:05
5

This post on the bitbucket issue tracker of virtualenvwrapper may be of interest. It is mentioned there that most of virtualenvwrapper's functions work with the venv virtual environments in Python 3.3.

furins
  • 4,979
  • 1
  • 39
  • 57
0 _
  • 10,524
  • 11
  • 77
  • 109
0

I added export VIRTUALENV_PYTHON=/usr/bin/python3 to my ~/.bashrc like this:

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENV_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

then run source .bashrc

and you can specify the python version for each new env mkvirtualenv --python=python2 env_name

Mustapha-Belkacim
  • 1,653
  • 1
  • 15
  • 19