I’ve been learning Python recently. I had a choice between learning Python 2.7 or Python 3, and I chose the latter. It may be true that many people still work in Python 2.7, but I thought I should start off as up-to-date as possible.
This meant that I had to work out how to set up a virtual environment without virtualenv.
(Hopefully Python 3.3 will finally be the default version of Python in Ubuntu 14.04 LTS.)
What is virtualenv?
Virtualenv is a Python package that will setup a “virtual” python environment in a specific directory.
This virtual environment will keep your python version and modules separate from the system’s Python installation:
$ virtualenv env # create new environment in "env" folder $ source env/bin/activate # Active "env" (env) $ which pip # "pip" is now inside "env" folder env/bin/pip (env) /project$ deactivate # Deactivate env /project$ which pip # "pip" is back to default /usr/bin/pip
This means that you can keep a fixed python environment fixed for a specific project regardless of whether the wider system changes. Virtual environments complement
When “env” is active,
pip install somemodule will install “somemodule” into
env/lib/pythonx.x/site-packages directory instead of the system’s normal python path.
This means that you can install exactly the modules you need for your current project and no more:
$ source env/bin/activate # Activate a new environment (env) $ pip freeze # No output - clean environment (env) $ pip install -r requirements.txt # Install project dependencies
Python 3 and pyvenv
Virtualenv doesn’t play nicely with Python 3, so it’s best not to try to use it.
Fortunately, python 3.3 (the current version of the Ubuntu python3 package) actually has a native virtual environment manager called
Unfortunately, the resulting environment doesn’t include pip. You can install pip into your virtual environment, but it’s all rather clunky.
Python 3.4’s version of
pyvenv will include
pip, making management of virtual environments simple again, and now native.
The downside here is that Python 3.4 is still in beta, and I can’t find a PPA to install it through
apt-get (the easy way).
Building Python 3.4 from source
Fortunately, building Python 3.4.0-b1 from source was simple on Ubuntu 13.10:
$ sudo apt-get install build-essential # Make sure we have build tools $ wget http://www.python.org/ftp/python/3.4.0/Python-3.4.0b1.tgz # download $ tar -xzf Python-3.4.0b1.tgz # unzip $ cd Python-3.4.0b1/ # open directory $ ./configure # configure for this system $ make # build $ sudo make install # install to /usr/local/
You should now find you have a few new binaries (in
pyvenv-3.4 is installed, here’s how you might use it to setup a Django environment and a django project:
$ pyvenv-3.4 djenv # create django virtual env $ source djenv/bin/activate # activate it (djenv) $ which pip # check pip points to the right place /home/me/djenv/bin/pip (djenv) $ pip freeze # check our environment is clean (no output) (djenv) $ pip install django django-extensions # install django dependencies (djenv) $ pip freeze # see our installed dependencies Django==1.6.1 django-extensions==1.2.5 six==1.4.1 (djenv) $ django-admin.py startproject newproject # create new django project (djenv) $ pip freeze > newproject/requirements.txt # save dependencies into project
While all the above setup isn’t that hard, I’m hoping that by 2015 we might see Python 3.4 become stable and become the default version of Python in Ubuntu 14.10.
After that, I guess the next thing would be for someone to create something similar to virtualenv wrapper for