Skip to content
Switch branches/tags

Latest commit


Git stats


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

Brandon the Devpi Builder

Coverage Status Latest Version

Brandon, the devpi builder, takes a requirements.txt and incrementally fills a devpi index with wheels of the listed python packages.

Brandon by Example

Given a requirements.txt, we can upload all listed packages to the index opensource/Debian_7 on a local devpi using the following command:

$ devpi-builder requirements.txt http://localhost:3141/opensource/Debian_7

Example of such a requirements.txt:


Commandline Usage

usage: devpi-builder [-h] [--batch] [--user USER] [--password PASSWORD]
                    [--blacklist BLACKLIST] [--pure-index PURE_INDEX]
                    [--junit-xml JUNIT_XML] [--run-id RUN_ID] [--dry-run]
                    [--client-cert CLIENT_CERT]
                    requirements index

Create wheels for all given project versions and upload them to the given

positional arguments:
requirements          requirements.txt style file specifying which project
                        versions to package.
index                 The index to upload the packaged software to.

optional arguments:
-h, --help            show this help message and exit
--batch               Batch mode. Do not prompt for credentials
--user USER           The user to log in as.
--password PASSWORD   Password of the user.
--blacklist BLACKLIST
                        Packages matched by this requirements.txt style file
                        will never be build.
--pure-index PURE_INDEX
                        The index to use for pure packages. Any non-pure
                        package will be uploaded to the index given as
                        positional argument. Packages already found in the
                        pure index will not be built, either.
--junit-xml JUNIT_XML
                        Write information about the build success / failure to
                        a JUnit-compatible XML file.
--run-id RUN_ID       Add the given string to all entries in the XML output,
                        allowing to distinguish output from multiple runs in a
                        merged XML.
--dry-run             Build missing wheels, but do not modify the state of
                        the devpi server.
--client-cert CLIENT_CERT
                        Client key to use to authenticate with the devpi

The following environment variables can be used instead of command line arguments:

The value of this environment variable will be used if --user is not given.
The value of this environment variable will be used if --password is not given.


  • Read a requirements.txt style input file.
  • Read user/pass from the environment (using DEVPI_USER and DEVPI_PASSWORD).
  • Support multiple versions of a package in the same file.
  • Only build packages not yet in the target index.
  • Support a black-list for packages to never be built and uploaded (certain packages like numpy are fragile regarding their interdependency with other packages).
  • Can use separate indices for plain python packages and those with binary contents.
  • Can log build results to a JUnit compatible XML file, thus that it can be parsed by Jenkins.