rgommers / peps

Python Enhancement Proposals
https://peps.python.org
0 stars 1 forks source link

say something about `python-devel` and how to treat that implicitly or explicitly #10

Closed rgommers closed 10 months ago

rgommers commented 1 year ago

This question was asked several times in https://discuss.python.org/t/pep-725-specifying-external-dependencies-in-pyproject-toml/31888. Probably should be implicit, since Python itself is implicit too. But either way there should be some recommendation here about how to think about having the Python headers and supporting files like python.pc available when needed.

rgommers commented 1 year ago

This should also cover a more general "one-to-many mapping". The issue isn't specific to python, for example blas and blas-devel are often separate too. And distros may decide by themselves to split up packages more (e.g., separate out data files).

pradyunsg commented 1 year ago

IIUC, that's a slightly separate issue which applies to all virtual dependencies (but not the PURL cases). When there's an interface/blas involved, it's not explicit whether you need just the binaries/.sos/.dlls to run with (i.e. blas) vs need the headers/libraries to compile against (i.e. blas-devel).

What to do about Python headers themselves when a compiler is involved, is separate from what to do about virtual dependencies when they're specified and it's unclear if they're needed as something to compile or link or run against.

rgommers commented 1 year ago

IIUC, that's a slightly separate issue which applies to all virtual dependencies

I think the headers and -devel package split applies just as much to concrete dependencies (when they're shared or static libraries) as virtual ones.

it's not explicit whether you need just the binaries/.sos/.dlls to run with (i.e. blas) vs need the headers/libraries to compile against (i.e. blas-devel).

It is not 100% explicit, but this is where build-requires vs. host-requires helps. For build-requires, you typically do not need headers - these are things like compilers and code generators. For host-requires, those are things that need to be present on the host system. And those are almost always libraries (for which you then need a -devel package if that exists). So the way I'd implement this is to always install -devel packages for host-requires dependencies, and not for build-requires.

What to do about Python headers themselves when a compiler is involved, is separate

Yes, this is a completely separate question. The problem is that Python itself is an assumed external dependency, it's really special-cased in pyproject.toml. While it's not special-cased in any way in other packaging systems, it's just a package.

rgommers commented 10 months ago

Included in version 2 of the PEP draft, which is up now - so closing.