Files
nixpkgs/pkgs/development/python-modules/pex/default.nix

70 lines
2.5 KiB
Nix

{
lib,
buildPythonPackage,
fetchPypi,
fetchurl,
setuptools,
}:
let
# 4 binaries which require vendoring, as otherwise
# the build system behind pex will attempt to fetch
# them during at build time
uv-trampoline = {
# Taken from https://github.com/pex-tool/pex/blob/2c66932d6645e8e542e5386eae08b9cc2dbb2a21/pex/windows/__init__.py#L45
version = "0.5.29";
aarch64-gui = fetchurl {
url = "https://raw.githubusercontent.com/astral-sh/uv/refs/tags/${uv-trampoline.version}/crates/uv-trampoline/trampolines/uv-trampoline-aarch64-gui.exe";
hash = "sha256-mb8x1FpyH+wy11X5YgWfqh/VUwBb62M4Zf9aFr5V4EE=";
};
aarch64-console = fetchurl {
url = "https://raw.githubusercontent.com/astral-sh/uv/refs/tags/${uv-trampoline.version}/crates/uv-trampoline/trampolines/uv-trampoline-aarch64-console.exe";
hash = "sha256-1S2aM+6CV7rKz+3ncM5X7kk7uDQeuha1+8lUEMYC75k=";
};
x86_64-gui = fetchurl {
url = "https://raw.githubusercontent.com/astral-sh/uv/refs/tags/${uv-trampoline.version}/crates/uv-trampoline/trampolines/uv-trampoline-x86_64-gui.exe";
hash = "sha256-icnp1oXrOZpc+dHTGvDbTHjr+D8M0eamvRrC9bPI/KI=";
};
x86_64-console = fetchurl {
url = "https://raw.githubusercontent.com/astral-sh/uv/refs/tags/${uv-trampoline.version}/crates/uv-trampoline/trampolines/uv-trampoline-x86_64-console.exe";
hash = "sha256-nLopBrlCMMFjkKVRlY7Ke2zFGpQOyF5mSlLs0d7+HRQ=";
};
};
in
buildPythonPackage rec {
pname = "pex";
version = "2.38.1";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-ejd9JWmDutYpwR+KPiS90Y3XKyyOwRAMpCEN013VMdI=";
};
preBuild = ''
mkdir -p pex/windows/stubs
cp ${uv-trampoline.aarch64-gui} pex/windows/stubs/uv-trampoline-aarch64-gui.exe
cp ${uv-trampoline.aarch64-console} pex/windows/stubs/uv-trampoline-aarch64-console.exe
cp ${uv-trampoline.x86_64-gui} pex/windows/stubs/uv-trampoline-x86_64-gui.exe
cp ${uv-trampoline.x86_64-console} pex/windows/stubs/uv-trampoline-x86_64-console.exe
'';
build-system = [ setuptools ];
# A few more dependencies I don't want to handle right now...
doCheck = false;
pythonImportsCheck = [ "pex" ];
meta = with lib; {
description = "Python library and tool for generating .pex (Python EXecutable) files";
homepage = "https://github.com/pantsbuild/pex";
changelog = "https://github.com/pantsbuild/pex/releases/tag/v${version}";
license = licenses.asl20;
maintainers = [ ];
};
}