skip to navigation
skip to content

devpi-builder 3.0.0

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

Brandon the Devpi Builder

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 environment (using DEVPI_USER/DEVPI_PASS)
  • 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.




This lists the most important changes for each release.

Version 3.0.0 - 2017-06-16


  • The command line parameter --batch can be used to disable any prompts.


  • The way credentials are passed has been changed in an incompatible way. The positional arguments for user and password no longer exist. Instead, use one of the following:
    • Pass the credentials via --user and --password command line arguments.
    • Pass the credentials via the environment variables DEVPI_USER and DEVPI_PASSWORD.
    • Answer the interactive prompt for user and password. This is only possible if --batch is not used.

Version 2.3.1 - 2017-05-19


  • Improved performance if a blacklist is used.

Version 2.3.0 — 2017-04-07


  • The command line parameter --run-id allows to specify a run identifier that will be added to each entry in the generated JUnit XML.


Version 2.2.0 — 2016-05-23


  • Capture build errors for better output in case of build failures. Thanks Travis Mehlinger.

Version 2.1.0 — 2016-04-22


  • Support for client certificates. Thanks Hans Lawrenz.

Version 2.0.0 — 2016-01-20


  • Compatibility with pip >= 8.0 by relying on pip’s default download cache mechanism instead of explicitly requiring a download cache. This effectively disables caching for people still using pip < 6.0. Thanks Christian Stefanescu.
  • Support for dry-running the wheel build without changing the devpi server state.
  • Python 3.5 is now officially supported.


  • Python 3.2 is no longer supported.

Version 1.0.0 — 2015-05-22


  • Use devpi-plumber instead of a custom devpi wrapper.
  • Check the blacklist first when deciding whether to build a package.

Version 0.4.0 — 2015-09-13


  • Only consider a package to exist if it is a wheel and it is compatible with the current system. Thanks Michael Still and David Szotten


  • The source distribution now properly contains a Thanks Mikhail Lukyanchenko.

Version 0.3.0 — 2015-08-15


  • Support for special-case handling of pure python wheels
  • Optional support for reporting skipped packages in a JUnit-compatible XML
  • Python 3 support

Version 0.2.1 — 2014-08-07


  • Fixed crash if a built wheel could cannot be found (because pip<=1.5.2 skipped it).

Version 0.2.0 — 2014-08-01


  • Support for package blacklisting to never build certain wheels.


  • build as many packages as possible. Do not stop if one fails.

Version 0.1.0 — 2014-08-01


  • Build a list of packages and upload them to a Devpi index
File Type Py Version Uploaded on Size
devpi-builder-3.0.0.tar.gz (md5) Source 2017-06-16 18KB
devpi_builder-3.0.0-py2.py3-none-any.whl (md5) Python Wheel py2.py3 2017-06-16 12KB