As per title. We do specify Cython as a build requirement in pyproject.toml, however we also require people to use --no-build-isolation because we rely on the PETSc that's already been built for the animate/cython/numbering.pyx module, and that option tells pip that it should use the current environment for building the module assuming everything it needs is installed there already (i.e. it ignores the build requirements in pyproject.toml).
If you look at the firedrake main installation instructions they deal with this, is via an extra step:
pip install -r ./firedrake/requirements-build.txt
So when users of Firedrake-main build and install animate, it just uses the packages that were installed as part of building Firedrake. However if they use Firedrake-release, it does not build firedrake in the user environment, and thus Cython may not be installed. This currently breaks the release container build: https://github.com/mesh-adaptation/docs/actions/runs/25202706540/job/73898940736
Note that even after pip install Cython, animate still fails to install (in the firedrake-parmmg-base:release container) because it's also lacking a sufficiently new setuptools (again in the case of the main build we rely on firedrake/requirements-build.txt specifying setuptools>=77).
I'm a little loath to add another step in the installation instruction and have our own requirements-build.txt file, but I can't really think of another solution. @joewallwork any thoughts?
I suppose one way we could make things easier for users is if we'd actually upload our releases to pypi, so people can just pip install animate.
As per title. We do specify Cython as a build requirement in pyproject.toml, however we also require people to use
--no-build-isolationbecause we rely on the PETSc that's already been built for the animate/cython/numbering.pyx module, and that option tells pip that it should use the current environment for building the module assuming everything it needs is installed there already (i.e. it ignores the build requirements in pyproject.toml).If you look at the firedrake main installation instructions they deal with this, is via an extra step:
So when users of Firedrake-main build and install animate, it just uses the packages that were installed as part of building Firedrake. However if they use Firedrake-release, it does not build firedrake in the user environment, and thus Cython may not be installed. This currently breaks the release container build: https://github.com/mesh-adaptation/docs/actions/runs/25202706540/job/73898940736
Note that even after
pip install Cython, animate still fails to install (in the firedrake-parmmg-base:release container) because it's also lacking a sufficiently new setuptools (again in the case of the main build we rely on firedrake/requirements-build.txt specifyingsetuptools>=77).I'm a little loath to add another step in the installation instruction and have our own requirements-build.txt file, but I can't really think of another solution. @joewallwork any thoughts?
I suppose one way we could make things easier for users is if we'd actually upload our releases to pypi, so people can just
pip install animate.