Created
September 1, 2021 00:04
-
-
Save tomprince/9a6cff05222dfaf59577f6b9fd07d0f3 to your computer and use it in GitHub Desktop.
PEP517 requirements in mach-nix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{mach-nix, pkgs ? import <nixpkgs> {}, lib ? pkgs.lib}: | |
let | |
extract-metadata = import ./extract-metadata.nix { inherit lib mkPython pkgs; }; | |
buildPythonApplication = {...}@args: let | |
metadata = extract-metadata { inherit (args) python src providers; }; | |
requirements = lib.concatStringsSep "\n" metadata.requires_dist; | |
in | |
mach-nix.buildPythonApplication ({ inherit requirements; } // args); | |
in | |
buildPythonApplication { ... }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{lib, mkPython, pkgs}: {src, python, providers}: | |
let | |
pyproject-toml = "${src}/pyproject.toml"; | |
default-build-system = { | |
requires = ["setuptools >= 40.8.0" "wheel"]; | |
build-backend = "setuptools.build_meta:__legacy__"; | |
}; | |
build-system = if builtins.pathExists pyproject-toml then | |
let | |
toml = builtins.fromTOML (builtins.readFile pyproject-toml); | |
in toml.build-system | |
else default-build-system; | |
base-env = mkPython { | |
inherit python providers; | |
requirements = '' | |
pep517 | |
importlib-metadata >= 4.0.0 | |
''; | |
}; | |
build-env = mkPython { | |
inherit python providers; | |
requirements = lib.concatStringsSep "\n" build-system.requires; | |
}; | |
extract = let | |
args = lib.escapeShellArgs [build-env.interpreter build-system.build-backend build-system.backend-path or ""]; | |
in pkgs.runCommand "python-metadata.json" {} | |
'' | |
${base-env.interpreter} ${./extract-metadata.py} $out ${src} ${args} | |
''; | |
in | |
builtins.fromJSON (builtins.readFile extract) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import json | |
import sys | |
from importlib_metadata import Distribution | |
from pep517.wrappers import Pep517HookCaller | |
_, out, source, python, backend, backend_path = sys.argv | |
hooks = Pep517HookCaller( | |
source, build_backend=backend, python_executable=python, backend_path=backend_path | |
) | |
dist = Distribution.at(hooks.prepare_metadata_for_build_wheel(".")) | |
with open(out, "x") as f: | |
json.dump(dist.metadata.json, f) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment