pip-faster in detail

By design pip-faster maintains the interface of pip, and should only have a few desirable behavior differences, listed below.

  1. pip-faster adds optional “prune” capability to the pip install subcommand. pip-faster install --prune will uninstall any installed packages that are not required (as arguments to the same install command). This is used by default in venv-update to implement reproducible builds.

  2. We’ve taken great care to reduce the number of round-trips to PyPI, which makes up the majority of time spent on what should be a no-op update. For example, if you’re installing a specific version of a package which we already have cached, there’s no need to talk to PyPI, but vanilla pip will.

  3. Packages are downloaded and wheeled before installation (if they aren’t available from PyPI as wheels). If the virtualenv needs to be rebuilt, or you use the same requirement in another project, the wheel can be reused. This greatly speeds up installation of projects like lxml or numpy which have a slow-to-compile binary component.

    Mainline pip recently added this feature (in pip 7.0, 2015-05-21). We plan to merge, but this isn’t currently an urgent work item; all of our use cases are satisfied. However, patches are welcome.

  4. pip-faster will refuse to install package versions which conflict (we generally consider this a feature); stock pip, on the other hand, will happily install conflicting packages. Similarly, pip-faster detects circular dependencies and unsatisfied dependencies and throws an error where stock pip would not.


You can pip install venv-update to get pip-faster, the same way you would any other Python tool, but if you’re using venv-update it’s not necessary to install pip-faster; the venv-update script will install the correct version inside your virtualenv for you.