Hi Liam,
Sorry for the trouble. The cause is rooted in the latest updates to Setuptools and Distribute on PyPI which were launched today.
I believe what’s happening here is pip is installing Distribute 0.7, which triggers the uninstallation of Distribute, but Distribute 0.7 (a compatibility wrapper) depends on a setuptools module to be in place to install.
I’m unsure about the failed rollback. That looks like a separate issue in pip.