diff options
Diffstat (limited to 'pkgs/development/interpreters/python')
7 files changed, 75 insertions, 27 deletions
diff --git a/pkgs/development/interpreters/python/catch_conflicts/catch_conflicts.py b/pkgs/development/interpreters/python/catch_conflicts/catch_conflicts.py index bb82900c65a..d5c99e64751 100644 --- a/pkgs/development/interpreters/python/catch_conflicts/catch_conflicts.py +++ b/pkgs/development/interpreters/python/catch_conflicts/catch_conflicts.py @@ -1,30 +1,34 @@ -import pkg_resources +from importlib.metadata import PathDistribution +from pathlib import Path import collections import sys + do_abort = False packages = collections.defaultdict(list) -for f in sys.path: - for req in pkg_resources.find_distributions(f): - if req not in packages[req.project_name]: - # some exceptions inside buildPythonPackage - if req.project_name in ['setuptools', 'pip', 'wheel']: - continue - packages[req.project_name].append(req) + +for path in sys.path: + for dist_info in Path(path).glob("*.dist-info"): + dist = PathDistribution(dist_info) + + packages[dist._normalized_name].append( + f"{dist._normalized_name} {dist.version} ({dist._path})" + ) for name, duplicates in packages.items(): if len(duplicates) > 1: do_abort = True print("Found duplicated packages in closure for dependency '{}': ".format(name)) - for dup in duplicates: - print(" " + repr(dup)) + for duplicate in duplicates: + print(f"\t{duplicate}") if do_abort: print("") print( - 'Package duplicates found in closure, see above. Usually this ' - 'happens if two packages depend on different version ' - 'of the same dependency.') + "Package duplicates found in closure, see above. Usually this " + "happens if two packages depend on different version " + "of the same dependency." + ) sys.exit(1) diff --git a/pkgs/development/interpreters/python/catch_conflicts/catch_conflicts_py2.py b/pkgs/development/interpreters/python/catch_conflicts/catch_conflicts_py2.py new file mode 100644 index 00000000000..bb82900c65a --- /dev/null +++ b/pkgs/development/interpreters/python/catch_conflicts/catch_conflicts_py2.py @@ -0,0 +1,30 @@ +import pkg_resources +import collections +import sys + +do_abort = False +packages = collections.defaultdict(list) + +for f in sys.path: + for req in pkg_resources.find_distributions(f): + if req not in packages[req.project_name]: + # some exceptions inside buildPythonPackage + if req.project_name in ['setuptools', 'pip', 'wheel']: + continue + packages[req.project_name].append(req) + + +for name, duplicates in packages.items(): + if len(duplicates) > 1: + do_abort = True + print("Found duplicated packages in closure for dependency '{}': ".format(name)) + for dup in duplicates: + print(" " + repr(dup)) + +if do_abort: + print("") + print( + 'Package duplicates found in closure, see above. Usually this ' + 'happens if two packages depend on different version ' + 'of the same dependency.') + sys.exit(1) diff --git a/pkgs/development/interpreters/python/cpython/2.7/default.nix b/pkgs/development/interpreters/python/cpython/2.7/default.nix index b336caf6a0a..5cdd307e70f 100644 --- a/pkgs/development/interpreters/python/cpython/2.7/default.nix +++ b/pkgs/development/interpreters/python/cpython/2.7/default.nix @@ -133,6 +133,11 @@ let ] ++ lib.optionals (x11Support && stdenv.isDarwin) [ ./use-correct-tcl-tk-on-darwin.patch + + ] ++ lib.optionals stdenv.isDarwin [ + # Fix darwin build https://bugs.python.org/issue34027 + ../3.7/darwin-libutil.patch + ] ++ lib.optionals stdenv.isLinux [ # Disable the use of ldconfig in ctypes.util.find_library (since diff --git a/pkgs/development/interpreters/python/default.nix b/pkgs/development/interpreters/python/default.nix index 2d293bb29a0..8f775699f48 100644 --- a/pkgs/development/interpreters/python/default.nix +++ b/pkgs/development/interpreters/python/default.nix @@ -30,10 +30,10 @@ sourceVersion = { major = "3"; minor = "11"; - patch = "5"; + patch = "6"; suffix = ""; }; - hash = "sha256-hc0S6c8dbVpF8X96/hzr5+5ijTKCKBxJLoat9jbe+j8="; + hash = "sha256-D6t4+n8TP084IQxiYNkNfA1ccZhEZBnOBX7HrC5vXzg="; }; }; diff --git a/pkgs/development/interpreters/python/hooks/default.nix b/pkgs/development/interpreters/python/hooks/default.nix index 5aee357dd91..0a4600b9d6c 100644 --- a/pkgs/development/interpreters/python/hooks/default.nix +++ b/pkgs/development/interpreters/python/hooks/default.nix @@ -106,9 +106,16 @@ in { pythonCatchConflictsHook = callPackage ({ makePythonHook, setuptools }: makePythonHook { name = "python-catch-conflicts-hook"; - substitutions = { - inherit pythonInterpreter pythonSitePackages setuptools; - catchConflicts=../catch_conflicts/catch_conflicts.py; + substitutions = let + useLegacyHook = lib.versionOlder python.version "3.10"; + in { + inherit pythonInterpreter pythonSitePackages; + catchConflicts = if useLegacyHook then + ../catch_conflicts/catch_conflicts_py2.py + else + ../catch_conflicts/catch_conflicts.py; + } // lib.optionalAttrs useLegacyHook { + inherit setuptools; }; } ./python-catch-conflicts-hook.sh) {}; @@ -183,16 +190,14 @@ in { }; } ./setuptools-check-hook.sh) {}; - setuptoolsRustBuildHook = callPackage ({ makePythonHook, setuptools-rust, rust }: + setuptoolsRustBuildHook = callPackage ({ makePythonHook, setuptools-rust }: makePythonHook { name = "setuptools-rust-setup-hook"; propagatedBuildInputs = [ setuptools-rust ]; substitutions = { pyLibDir = "${python}/lib/${python.libPrefix}"; - cargoBuildTarget = rust.toRustTargetSpec stdenv.hostPlatform; - cargoLinkerVar = lib.toUpper ( - builtins.replaceStrings ["-"] ["_"] ( - rust.toRustTarget stdenv.hostPlatform)); + cargoBuildTarget = stdenv.hostPlatform.rust.rustcTargetSpec; + cargoLinkerVar = stdenv.hostPlatform.rust.cargoEnvVarTarget; targetLinker = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"; }; } ./setuptools-rust-hook.sh) {}; @@ -228,5 +233,8 @@ in { makePythonHook { name = "python${python.pythonVersion}-sphinx-hook"; propagatedBuildInputs = [ pythonOnBuildForHost.pkgs.sphinx installShellFiles ]; + substitutions = { + sphinxBuild = "${pythonOnBuildForHost.pkgs.sphinx}/bin/sphinx-build"; + }; } ./sphinx-hook.sh) {}; } diff --git a/pkgs/development/interpreters/python/hooks/sphinx-hook.sh b/pkgs/development/interpreters/python/hooks/sphinx-hook.sh index ca67fa9beab..0307e83d947 100644 --- a/pkgs/development/interpreters/python/hooks/sphinx-hook.sh +++ b/pkgs/development/interpreters/python/hooks/sphinx-hook.sh @@ -38,7 +38,7 @@ buildSphinxPhase() { for __builder in "${__sphinxBuilders[@]}"; do echo "Executing sphinx-build with ${__builder} builder" - sphinx-build -M "${__builder}" "${__sphinxRoot}" ".sphinx/${__builder}" -v + @sphinxBuild@ -M "${__builder}" "${__sphinxRoot}" ".sphinx/${__builder}" -v done runHook postBuildSphinx diff --git a/pkgs/development/interpreters/python/mk-python-derivation.nix b/pkgs/development/interpreters/python/mk-python-derivation.nix index 060b840ce22..c14c6bc096f 100644 --- a/pkgs/development/interpreters/python/mk-python-derivation.nix +++ b/pkgs/development/interpreters/python/mk-python-derivation.nix @@ -102,13 +102,14 @@ , disabledTestPaths ? [] +# Allow passing in a custom stdenv to buildPython* +, stdenv ? python.stdenv + , ... } @ attrs: assert (pyproject != null) -> (format == null); let - inherit (python) stdenv; - format' = if pyproject != null then if pyproject then @@ -194,7 +195,7 @@ let # Keep extra attributes from `attrs`, e.g., `patchPhase', etc. self = toPythonModule (stdenv.mkDerivation ((builtins.removeAttrs attrs [ "disabled" "checkPhase" "checkInputs" "nativeCheckInputs" "doCheck" "doInstallCheck" "dontWrapPythonPrograms" "catchConflicts" "pyproject" "format" - "disabledTestPaths" "outputs" + "disabledTestPaths" "outputs" "stdenv" ]) // { name = namePrefix + name_; |