nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at 22.05 83 lines 2.3 kB view raw
1# shellcheck shell=bash 2 3# Setup hook that modifies Python dependencies versions. 4# 5# Example usage in a derivation: 6# 7# { …, pythonPackages, … }: 8# 9# pythonPackages.buildPythonPackage { 10# … 11# nativeBuildInputs = [ pythonPackages.pythonRelaxDepsHook ]; 12# 13# # This will relax the dependency restrictions 14# # e.g.: abc>1,<=2 -> abc 15# pythonRelaxDeps = [ "abc" ]; 16# # This will relax all dependencies restrictions instead 17# # pythonRelaxDeps = true; 18# # This will remove the dependency 19# # e.g.: cde>1,<=2 -> <nothing> 20# pythonRemoveDeps = [ "cde" ]; 21# # This will remove all dependencies from the project 22# # pythonRemoveDeps = true; 23# … 24# } 25 26_pythonRelaxDeps() { 27 local -r metadata_file="$1" 28 29 if [[ -z "${pythonRelaxDeps:-}" ]] || [[ "$pythonRelaxDeps" == 0 ]]; then 30 return 31 elif [[ "$pythonRelaxDeps" == 1 ]]; then 32 sed -i "$metadata_file" -r \ 33 -e 's/(Requires-Dist: \S*) \(.*\)/\1/' 34 else 35 for dep in $pythonRelaxDeps; do 36 sed -i "$metadata_file" -r \ 37 -e "s/(Requires-Dist: $dep) \(.*\)/\1/" 38 done 39 fi 40} 41 42_pythonRemoveDeps() { 43 local -r metadata_file="$1" 44 45 if [[ -z "${pythonRemoveDeps:-}" ]] || [[ "$pythonRemoveDeps" == 0 ]]; then 46 return 47 elif [[ "$pythonRemoveDeps" == 1 ]]; then 48 sed -i "$metadata_file" \ 49 -e '/Requires-Dist:.*/d' 50 else 51 for dep in $pythonRemoveDeps; do 52 sed -i "$metadata_file" \ 53 -e "/Requires-Dist: $dep/d" 54 done 55 fi 56 57} 58 59pythonRelaxDepsHook() { 60 pushd dist 61 62 local -r package="$pname-$version" 63 local -r unpack_dir="unpacked" 64 local -r metadata_file="$unpack_dir/$package/$package.dist-info/METADATA" 65 local -r wheel=$(echo "$package"*".whl") 66 67 @pythonInterpreter@ -m wheel unpack --dest "$unpack_dir" "$wheel" 68 rm -rf "$wheel" 69 70 _pythonRelaxDeps "$metadata_file" 71 _pythonRemoveDeps "$metadata_file" 72 73 if (( "${NIX_DEBUG:-0}" >= 1 )); then 74 echo "pythonRelaxDepsHook: resulting METADATA:" 75 cat "$unpack_dir/$package/$package.dist-info/METADATA" 76 fi 77 78 @pythonInterpreter@ -m wheel pack "$unpack_dir/$package" 79 80 popd 81} 82 83postBuild+=" pythonRelaxDepsHook"