Python: pip and virtualenv

pip is a package manager for Python modules; virtualenv turns a given directory tree into an isolated Python environment so you can use different module versions for different projects on the same machine. They really go hand-in-hand, and I realized pretty quickly that they’re more or less mandatory if you’re working on multiple projects in Python. This guide explains both modules and the setup process super well – below is a quick-and-dirty reference for feeling out your Python environment and then getting up and running.

While not strictly necessary, I’d like to see which modules I have installed by default. So in terminal:

pydoc modules

Okay, no pip (which is itself just a Python module). To install it, we can use the older, creakier, and not-particularly-recommended package manager, easy_install. This is fine for grabbing pip, but you don’t really want to use it for anything else. (This may require sudo.)

[sudo] easy_install pip

We could use this installation of pip to install modules globally (which may require sudo too)

[sudo] pip install [module]

but we’re probably not looking to do that too often. Instead, just as we used the not-quite-recommended easy_install to grab a better tool, we’re going to use this global pip to grab virtualenv:

sudo pip install virtualenv

Now we can head to the directory where we want to work on our first project. I made a directory called pyground for fooling around, so I cd to that and enter

virtualenv env 

This creates a new Python virtual environment inside the current directory, storing everything at your_directory_name/env/. Now (automatically packed in with your virtual environment!) you have a version of pip local to this environment, and this is what you’ll want to use to install a module to your working directory. To use this version of pip:

env/bin/pip install [module]

Note that you won’t have to use sudo here, because you’re not installing globally. You can check to see which modules you’ve installed via pip in this environment with

env/bin/pip freeze

And to run virtualenv’s local version of Python, you’ll use


And that’s it. You can repeat this process for as many environments as you like. The walkthrough linked above offers a way to cut down on typing and temporarily make your shell recognize a given environment’s pips and pythons as the default, but I kind of prefer to type out the env/bins.