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

env/bin/python 

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.