Hi All,
I’m still very new to Nix but trying to daily-drive NixOS.
What I’m currently stuck on is injecting Python packages into a Jupyterlab service. What I have at the moment in the home-manager.home portion of my system flake is the following:
systemd.user.services.jupyter = let
jupyter = pkgs.jupyter-all.override {
python3 = pkgs.python311.withPackages (python-pkgs: with python-pkgs; [
numpy
matplotlib
]);
};
in {
Service = {
Type = "simple";
WorkingDirectory = "${home.homeDirectory}/notebooks";
ExecStart = "${jupyter}/bin/jupyter-lab --no-browser";
};
};
This fires up a JupyterLab process that I can connect to and which runs fine, but numpy etc. can’t be imported. From a devshell, I see that the python.withPackages
mechanism seems to rely on $PYTHONPATH
to pass in a python3-3.11.8-env
package that contains a lib/python3.11/site-packages
. I’m guessing that the systemd service just needs to have an Environment
key, but where do I get the python3-3.11.8-env
path from?
The Jupiter executable is in a /nix/store/#-python3-3.11.8-env/bin
location, but the site-packages only include the modules for Jupyter so I assume there’s another python3-3.11.8-env
in the nix-store that does have the python packages I’m trying to get. Trying things like jupyter.env
gives errors like *** Python 'env' attributes are intended for interactive nix-shell sessions, not for building! ***
but I’m just taking a stab in the dark here.
I’d appreciate any pointers on this. I see there are helpers like JupyEnv, but these seem focused on setting up ephemeral devshells, not running a service for long-term notes and seem like overkill for what I want.
I’ve found the best way to use python under nix is not to use nix for its packages because not all of its libraries are in nixpkgs
Requirements.txt and a venv still work on nixos the same way they would on a normal system