Virtualenvs with different interpreters

Update 2011-09-27: Turns out virtualenv and virtualenvwrapper support this out of the box. Most of what’s written below is horrifically complex compared to just using the -p switch when you make your virtualenv. You simply need to do this:

$ mkvirtualenv -p /path/to/some/python coolname

That’ll create a new virtualenv called “coolname” that uses /path/to/some/python for it’s Python interpreter. I’ve tested this with PyPy and it worked great.

A recent comment on the original Virtualenv Burrito announcement asked whether it was possible to create virtualenvs using different Python interpreters. The answer is a cautious: yes!

When virtualenv-burrito installs virtualenv, it prevents the virtualenv command from tying itself to a specific interpreter. I wanted to be able to switch between Python versions, creating virtualenvs for each. I haven’t publicized this feature, nor made it easy to use since there may be hidden pitfalls. That said, I’ve not run into any problems.

The way it works is mkvirtualenv uses the same interpreter invoked by the python command to create the virtualenv. For example, normally when I run mkvirtualenv I get a Python 2.7 environment. Using MacPorts, I can switch from my 2.7 default to 2.6 with:

port select --set python26

Now running mkvirtualenv creates a 2.6 environment.

Regardless of what your current default Python interpreter is, once the virtualenv is made, it stays tied to the Python used during creation.

If you don’t have a nice way to switch your default Python, you can still hack it. The key is making the python command use the interpreter you want.