crane/docs/faq/rebuilds-pyo3.md

26 lines
761 B
Markdown

## I see the `pyo3` crate constantly rebuilding
The `pyo3` crate uses checks `$PYO3_PYTHON` for a path to the `python` binary it
should use during the build. If this environment variable is not set, `pyo3`
will look for whatever version of `python` is on the `$PATH`, which
unfortunately results in the crate being rebuilt when `$PATH` changes (i.e.
whenever the cargo artifacts are used in a derivation which may have different
build inputs).
The way to remedy this is to explicitly set `PYO3_PYTHON` to point to the
version of `python` that will be used by the derivation:
```nix
let
chosenPython = pkgs.python3;
in
craneLib.buildPackage {
env.PYO3_PYTHON = "${chosenPython}/bin/python";
nativeBuildInputs = [
chosenPython
];
# etc...
}
```