Skip to content
This repository has been archived by the owner on May 23, 2023. It is now read-only.


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Quickly and exactly synchronize a large python project's virtualenv with its requirements.

PyPI version Documentation

Please see for the complete documentation.

How to Contribute

  1. Fork this repository on github:

  2. Clone it:

  3. Make a feature branch for your changes:

     git remote add upstream
     git fetch upstream
     git checkout upstream/master -b my-feature-branch
  4. Make sure the test suite works before you start:

     make test
  5. Commit patches:

  6. Push to github: git pull && git push origin

  7. Send a pull request:

Running tests:

Run a particular test:

py.test tests/functional/

See all output from a test:

py.test -s -k downgrade

Check coverage of a single test:

./test tests/functional/


To develop and run tests suites on a devbox, make sure to:

  1. Python 3.6.0 on a xenial devbox breaks coverage. Use a bionic devbox instead.

  2. Override pip.conf to use public pypi. Don't forget to delete it after you're done!

$ cat ~/.pip/pip.conf
index-url =
  1. sudo apt-get install pypy-dev so TOXENV=pypy doesn't fail spectacularly