Python: Difference between revisions
Reorganize and add info about FHS |
Running compiled libraries with nix overlay |
||
| Line 101: | Line 101: | ||
</syntaxhighlight>This means that the library use compiled dynamically linked binaries that your NixOs environment fail to resolve. | </syntaxhighlight>This means that the library use compiled dynamically linked binaries that your NixOs environment fail to resolve. | ||
On NixOS, installing packages that need to compile code or use C libraries from outside of the <code>nix</code> package manager may fail if dependencies are not found in the expected locations. There are multiple ways to make it work: | On NixOS, installing packages that need to compile code or use C libraries from outside of the <code>nix</code> package manager may fail if dependencies are not found in the expected locations. There are multiple ways to make it work. | ||
==== Using nix overlay ==== | |||
<syntaxhighlight lang="nix"> | |||
{ | |||
nixpkgs.overlays = [( | |||
self: super: rec { | |||
# https://github.com/NixOS/nixpkgs/blob/c339c066b893e5683830ba870b1ccd3bbea88ece/nixos/modules/programs/nix-ld.nix#L44 | |||
# > We currently take all libraries from systemd and nix as the default. | |||
pythonldlibpath = lib.makeLibraryPath (with super; [ | |||
zlib | |||
zstd | |||
stdenv.cc.cc | |||
curl | |||
openssl | |||
attr | |||
libssh | |||
bzip2 | |||
libxml2 | |||
acl | |||
libsodium | |||
util-linux | |||
xz | |||
systemd | |||
]); | |||
# here we are overriding python program to add LD_LIBRARY_PATH to it's env | |||
python = super.stdenv.mkDerivation { | |||
name = "python"; | |||
buildInputs = [ super.makeWrapper ]; | |||
src = super.python311; | |||
installPhase = '' | |||
mkdir -p $out/bin | |||
cp -r $src/* $out/ | |||
wrapProgram $out/bin/python3 --set LD_LIBRARY_PATH ${pythonldlibpath} | |||
wrapProgram $out/bin/python3.11 --set LD_LIBRARY_PATH ${pythonldlibpath} | |||
''; | |||
}; | |||
poetry = super.stdenv.mkDerivation { | |||
name = "poetry"; | |||
buildInputs = [ super.makeWrapper ]; | |||
src = super.poetry; | |||
installPhase = '' | |||
mkdir -p $out/bin | |||
cp -r $src/* $out/ | |||
wrapProgram $out/bin/poetry --set LD_LIBRARY_PATH ${pythonldlibpath} | |||
''; | |||
}; | |||
} | |||
)]; | |||
environment.systemPackages = with pkgs; [ | |||
python # here python will be taken from the overlay up here | |||
poetry | |||
]; | |||
} | |||
</syntaxhighlight> | |||
==== Using `buildFHSEnv` in nix-shell ==== | ==== Using `buildFHSEnv` in nix-shell ==== | ||