Overriding
For more detailed information on overriding, see pyproject.nix
.
Overriding sdist's (source builds)
overrides-sdist.nix
{ pkgs }:
final: prev: {
pyzmq = prev.pyzmq.overrideAttrs (old: {
# Use the zeromq library from nixpkgs.
#
# If not provided by the system pyzmq will build a zeromq library
# as a part of it's package build, taking unnecessary time & effort.
buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.zeromq ];
# uv.lock does not contain build-system metadata.
# Meaning that for source builds, this needs to be provided by overriding.
#
# Pyproject.nix's build-system-pkgs contains some of the most
# important build systems already, so you don't have to add these to your project.
#
# For a comprehensive list see
# https://github.com/pyproject-nix/build-system-pkgs/blob/master/pyproject.toml
#
# For build-systems that are not present in this list you can either:
# - Add it to your `uv` project
# - Add it manually in an overlay
# - Submit a PR to build-system-pkgs adding the build system
nativeBuildInputs = old.nativeBuildInputs ++ [
(final.resolveBuildSystem {
cmake = [ ];
ninja = [ ];
packaging = [ ];
pathspec = [ ];
scikit-build-core = [ ];
cython = [ ];
})
];
});
}
The proper solution for this would be for uv
to lock build systems.
Overriding wheels (pre-built binaries)
overrides-wheels.nix
{ pkgs }:
_final: prev: {
# Wheels are automatically patched using autoPatchelfHook.
#
# For manylinux wheels the appropriate packages are added
# as described in https://peps.python.org/pep-0599/ and various other PEPs.
#
# Some packages provide binary libraries as a part of their binary wheels,
# others expect libraries to be provided by the system.
#
# Numba depends on libtbb, of a more recent version than nixpkgs provides in it's default tbb attribute.
numba = prev.numba.overrideAttrs (old: {
buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.tbb_2021_11 ];
});
}
Long term this situation could be improved by PEP-725.
Resources
-
Override utility functions
-
Third party overrides collection