at 23.11-beta 4.1 kB view raw
1{ lib, stdenv, callPackage, pythonPackagesExtensions, config, makeScopeWithSplicing', ... }: 2 3{ implementation 4, libPrefix 5, executable 6, sourceVersion 7, pythonVersion 8, packageOverrides 9, sitePackages 10, hasDistutilsCxxPatch 11, pythonOnBuildForBuild 12, pythonOnBuildForHost 13, pythonOnBuildForTarget 14, pythonOnHostForHost 15, pythonOnTargetForTarget 16, pythonAttr ? null 17, self # is pythonOnHostForTarget 18}: let 19 pythonPackages = let 20 ensurePythonModules = items: let 21 exceptions = [ 22 stdenv 23 ]; 24 providesSetupHook = lib.attrByPath [ "provides" "setupHook"] false; 25 valid = value: pythonPackages.hasPythonModule value || providesSetupHook value || lib.elem value exceptions; 26 func = name: value: 27 if lib.isDerivation value then 28 lib.extendDerivation (valid value || throw "${name} should use `buildPythonPackage` or `toPythonModule` if it is to be part of the Python packages set.") {} value 29 else 30 value; 31 in lib.mapAttrs func items; 32 in ensurePythonModules (callPackage 33 # Function that when called 34 # - imports python-packages.nix 35 # - adds spliced package sets to the package set 36 # - applies overrides from `packageOverrides` and `pythonPackagesOverlays`. 37 ({ pkgs, stdenv, python, overrides }: let 38 pythonPackagesFun = import ./python-packages-base.nix { 39 inherit stdenv pkgs lib; 40 python = self; 41 }; 42 otherSplices = { 43 selfBuildBuild = pythonOnBuildForBuild.pkgs; 44 selfBuildHost = pythonOnBuildForHost.pkgs; 45 selfBuildTarget = pythonOnBuildForTarget.pkgs; 46 selfHostHost = pythonOnHostForHost.pkgs; 47 selfTargetTarget = pythonOnTargetForTarget.pkgs or {}; # There is no Python TargetTarget. 48 }; 49 hooks = import ./hooks/default.nix; 50 keep = self: hooks self {}; 51 optionalExtensions = cond: as: lib.optionals cond as; 52 pythonExtension = import ../../../top-level/python-packages.nix; 53 python2Extension = import ../../../top-level/python2-packages.nix; 54 extensions = lib.composeManyExtensions ([ 55 hooks 56 pythonExtension 57 ] ++ (optionalExtensions (!self.isPy3k) [ 58 python2Extension 59 ]) ++ pythonPackagesExtensions ++ [ 60 overrides 61 ]); 62 aliases = self: super: lib.optionalAttrs config.allowAliases (import ../../../top-level/python-aliases.nix lib self super); 63 in makeScopeWithSplicing' { 64 inherit otherSplices keep; 65 f = lib.extends (lib.composeExtensions aliases extensions) pythonPackagesFun; 66 }) { 67 overrides = packageOverrides; 68 python = self; 69 }); 70 pythonOnBuildForHost_overridden = 71 pythonOnBuildForHost.override { inherit packageOverrides; self = pythonOnBuildForHost_overridden; }; 72in rec { 73 isPy27 = pythonVersion == "2.7"; 74 isPy37 = pythonVersion == "3.7"; 75 isPy38 = pythonVersion == "3.8"; 76 isPy39 = pythonVersion == "3.9"; 77 isPy310 = pythonVersion == "3.10"; 78 isPy311 = pythonVersion == "3.11"; 79 isPy312 = pythonVersion == "3.12"; 80 isPy2 = lib.strings.substring 0 1 pythonVersion == "2"; 81 isPy3 = lib.strings.substring 0 1 pythonVersion == "3"; 82 isPy3k = isPy3; 83 isPyPy = lib.hasInfix "pypy" interpreter; 84 85 buildEnv = callPackage ./wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; }; 86 withPackages = import ./with-packages.nix { inherit buildEnv pythonPackages;}; 87 pkgs = pythonPackages; 88 interpreter = "${self}/bin/${executable}"; 89 inherit executable implementation libPrefix pythonVersion sitePackages; 90 inherit sourceVersion; 91 pythonAtLeast = lib.versionAtLeast pythonVersion; 92 pythonOlder = lib.versionOlder pythonVersion; 93 inherit hasDistutilsCxxPatch; 94 # Remove after 24.11 is released. 95 pythonForBuild = 96 lib.warnIf (lib.isInOldestRelease 2311) "`pythonForBuild` (from `python*`) has been renamed to `pythonOnBuildForHost`" 97 pythonOnBuildForHost_overridden; 98 pythonOnBuildForHost = pythonOnBuildForHost_overridden; 99 100 tests = callPackage ./tests.nix { 101 python = self; 102 }; 103 104 inherit pythonAttr; 105}