And chaos ensued. Unable to install aws-cli via pip: https://github.com/aws/aws-cli/issues/8036
Mostly because of PyYAML: https://github.com/yaml/pyyaml/issues/724
I was pretty annoyed to discover that it had a separate build-time dependency on cython that you can't control from your requirements.txt.
In Spack [1] we can express all these constraints for the dependency solver, and we also try to always re-cythonize sources [2]. The latter is because bundled cythonized files are sometimes forward incompatible with Python, so it's better to just regenerate those with an up to date cython.
[1] https://github.com/spack/spack/ [2] https://github.com/spack/spack/pull/35995