python3Packages.pythonMetadataCheckHook: improve error message for mismatched pname

This commit is contained in:
Robert Schütz
2026-07-27 11:06:28 -07:00
parent 85141fe0ee
commit d3731cb537
3 changed files with 15 additions and 1 deletions

View File

@@ -368,6 +368,7 @@ in
substitutions = {
inherit pythonInterpreter pythonSitePackages;
pythonWithPackaging = lib.getExe (pythonOnBuildForHost.withPackages (ps: [ ps.packaging ]));
retrieveMetadata = ./python-metadata-check-hook-retrieve.py;
};
meta = {
maintainers = [ lib.maintainers.dotlambda ];

View File

@@ -0,0 +1,13 @@
from importlib.metadata import PackageNotFoundError, version
from sys import argv, exit, stderr
pname = argv[1]
try:
print(version(pname))
except PackageNotFoundError as e:
print(e, file=stderr)
print("This usually means that the derivation's pname does not correspond to the project name, as found on PyPI, in pyproject.toml, or in setup.{py,cfg}.", file=stderr)
print("Use the normalized name for the derivation's pname and its attribute name in python3Packages.", file=stderr)
print("See https://packaging.python.org/en/latest/specifications/name-normalization/.", file=stderr)
exit(1)

View File

@@ -19,7 +19,7 @@ pythonMetadataCheckPhase() {
# `python -P` avoids picking up egg-info dirs in $PWD
local metadataVersion
metadataVersion="$(PYTHONPATH="$pythonMetadataCheckOutput/@pythonSitePackages@:$PYTHONPATH" \
@pythonInterpreter@ -P -c 'from importlib.metadata import version; import sys; print(version(sys.argv[1]))' "$derivationPname")"
@pythonInterpreter@ -P @retrieveMetadata@ "$derivationPname")"
# check that both versions can be parsed
@pythonWithPackaging@ -c "from packaging.version import Version; from sys import argv; Version(argv[1]); Version(argv[2])" "$derivationVersion" "$metadataVersion"