nixpkgs/pkgs/development/interpreters/python/meta-package.nix
adisbladis 8cd58c7e14 python3Packages.mkPythonMetaPackage: init
This function exists create a meta package containing [metadata files](https://packaging.python.org/en/latest/specifications/recording-installed-packages/) to satisfy a dependency on a package, without it actually having been installed into the environment.
2024-08-30 00:24:31 +12:00

59 lines
1.3 KiB
Nix

{
buildPythonPackage,
lib,
hatchling,
}:
{
pname,
version,
dependencies ? [ ],
optional-dependencies ? { },
passthru ? { },
meta ? { },
}:
# Create a "fake" meta package to satisfy a dependency on a package, but don't actually build it.
# This is useful for packages that have a split binary/source dichotomy like psycopg2/psycopg2-binary,
# where we want to use the former, but some projects declare a dependency on the latter.
buildPythonPackage {
inherit
pname
version
dependencies
optional-dependencies
meta
passthru
;
pyproject = true;
# Make a minimal pyproject.toml that can be built
unpackPhase = ''
cat > pyproject.toml << EOF
[project]
name = "${pname}"
version = "${version}"
dependencies = ${builtins.toJSON (map lib.getName dependencies)}
[project.optional-dependencies]
${lib.optionalString (optional-dependencies != { }) (
(lib.concatStringsSep "\n" (
lib.mapAttrsToList (
group: deps: group + " = " + builtins.toJSON (map lib.getName deps)
) optional-dependencies
))
)}
[tool.hatch.build.targets.wheel]
bypass-selection = true
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
EOF
'';
build-system = [ hatchling ];
}