API Documentation¶
build provides a Python API for programmatic use in build tools, CI systems, and automation scripts.
Note
Most API examples below require the build backend to be installed in the current environment. Either install the
backend manually (for --no-isolation workflows) or use isolated environments as shown in the examples.
Basic Usage¶
Building a package programmatically:
from build import ProjectBuilder
builder = ProjectBuilder("path/to/project")
builder.build("wheel", "dist/")
Building both sdist and wheel:
from build import ProjectBuilder
builder = ProjectBuilder(".")
builder.build("sdist", "dist/")
builder.build("wheel", "dist/")
Using isolated environments (default):
from build import ProjectBuilder
from build.env import IsolatedEnvBuilder
with IsolatedEnvBuilder() as env:
builder = ProjectBuilder(".", runner=env.runner)
builder.build("wheel", "dist/")
Disabling isolation:
from build import ProjectBuilder
builder = ProjectBuilder(".", runner=lambda cmd, **kwargs: None)
builder.build("wheel", "dist/")
Getting package metadata without building:
from build import ProjectBuilder
import tempfile
builder = ProjectBuilder(".")
with tempfile.TemporaryDirectory() as tmpdir:
metadata_dir = builder.metadata_path(tmpdir)
# Read METADATA file from metadata_dir to extract package info
Accessing build dependencies:
from build import ProjectBuilder
builder = ProjectBuilder(".")
requires = builder.build_system_requires
print(f"Build requires: {requires}")
# Get additional dependencies for building a wheel
wheel_requires = builder.get_requires_for_build("wheel")
print(f"Wheel build requires: {wheel_requires}")
Handling errors:
from build import ProjectBuilder
from build import BuildException
try:
builder = ProjectBuilder(".")
builder.build("wheel", "dist/")
except BuildException as e:
print(f"Build failed: {e}")
Reference¶
build module¶
build - A simple, correct Python build frontend
- exception build.BuildBackendException(exception, description=None, exc_info=(None, None, None))¶
Bases:
ExceptionException raised when a backend operation fails.
- exception build.BuildException¶
Bases:
ExceptionException raised by
build.ProjectBuilder.
- exception build.BuildSystemTableValidationError¶
Bases:
BuildExceptionException raised when the
[build-system]table in pyproject.toml is invalid.
- exception build.FailedProcessError(exception, description)¶
Bases:
ExceptionException raised when a setup or preparation operation fails.
- class build.ProjectBuilder(source_dir, python_executable='/home/docs/checkouts/readthedocs.org/user_builds/pypa-build/checkouts/988/.tox/docs/bin/python3', runner=<function default_subprocess_runner>)¶
Bases:
objectThe PEP 517 consumer API.
- Parameters:
The
runner, if provided, must accept the following arguments:cmd: a list of strings representing the command and arguments to execute, as would be passed to e.g. ‘subprocess.check_call’.cwd: a string representing the working directory that must be used for the subprocess. Corresponds to the provided source_dir.extra_environ: a dict mapping environment variable names to values which must be set for the subprocess execution.
The default runner simply calls the backend hooks in a subprocess, writing backend output to stdout/stderr.
- build(distribution, output_directory, config_settings=None, metadata_directory=None)¶
Build a distribution.
- Parameters:
distribution (
Literal['sdist','wheel','editable']) – Distribution to build (sdistorwheel)output_directory (
str|PathLike[str]) – Directory to put the built distribution inconfig_settings (
Mapping[str,str|Sequence[str]] |None) – Config settings for the build backendmetadata_directory (
str|None) – If provided, should be the return value of a previouspreparecall on the samedistributionkind
- Return type:
- Returns:
The full path to the built distribution
- property build_system_requires: set[str]¶
The dependencies defined in the
pyproject.toml’sbuild-system.requiresfield or the default build dependencies ifpyproject.tomlis missing orbuild-systemis undefined.
- check_dependencies(distribution, config_settings=None)¶
Return the dependencies which are not satisfied from the combined set of
build_system_requiresandget_requires_for_build()for a given distribution.
- classmethod from_isolated_env(env, source_dir, runner=<function default_subprocess_runner>)¶
- Return type:
TypeVar(_TProjectBuilder, bound= ProjectBuilder)
- get_requires_for_build(distribution, config_settings=None)¶
Return the dependencies defined by the backend in addition to
build_system_requiresfor a given distribution.
- metadata_path(output_directory)¶
Generate the metadata directory of a distribution and return its path.
If the backend does not support the
prepare_metadata_for_build_wheelhook, a wheel will be built and the metadata will be extracted from it.
- prepare(distribution, output_directory, config_settings=None)¶
Prepare metadata for a distribution.
- Parameters:
- Return type:
- Returns:
The full path to the prepared metadata directory
build.env module¶
- class build.env.DefaultIsolatedEnv(*, installer='pip')¶
Bases:
IsolatedEnvIsolated environment which supports several different underlying implementations.
- install(requirements, constraints=[])¶
Install packages from PEP 508 requirements in the isolated build environment.
- Parameters:
requirements (
Collection[str]) – PEP 508 requirement specification to install- Note:
Passing non-PEP 508 strings will result in undefined behavior, you should not rely on it. It is merely an implementation detail, it may change any time without warning.
- Return type:
- make_extra_environ()¶
Generate additional env vars specific to the isolated environment.
build.util module¶
- build.util.project_wheel_metadata(source_dir, isolated=True, *, runner=<function quiet_subprocess_runner>)¶
Return the wheel metadata for a project.
Uses the
prepare_metadata_for_build_wheelhook if available, otherwisebuild_wheel.