I’ve never used poetry for an environment, but this is what i do (The environment is used for many things, not just notebooks):
# shell.nix
let
pkgs = import <nixpkgs> {};
python = pkgs.python37;
pythonPackages = python.pkgs;
in
with pkgs;
mkShell {
name = "pip-env";
buildInputs = with pythonPackages; [
azure-cli
kubectl
# Python requirements (enough to get a virtualenv going).
psutil
#tensorflow
#pyarrow
pandas
ipykernel
jupyter
pytest
setuptools
wheel
venvShellHook
libffi
openssl
gcc
unzip
];
venvDir = "venv37";
src = null;
postVenv = ''
unset SOURCE_DATE_EPOCH
./scripts/install_local_packages.sh
'';
postShellHook = ''
# Allow the use of wheels.
unset SOURCE_DATE_EPOCH
# get back nice looking PS1
source ~/.bashrc
source <(kubectl completion bash)
PYTHONPATH=$PWD/$venvDir/${python.sitePackages}:$PYTHONPATH
'';
}
And I can largely use it as a vanilla virtualenv environment. So if needed, i can just do something like pip install requests
, and it works for most packages that don’t have native dependencies. (I guess your buildFHSUserEnv is one way around this). Another benefit is that I get to download most of my python dependency through the nixpkgs cache, which is much faster than pip install
.
For running the notebook I can just do:
$ nix-shell
$ jupyter notebook
NOTE: Jupyter notebook kernels reference a python interpreter path, make sure that interpreter is able to find the necessary packages it needs. I achieve this through shell-hooks from the packages, so my PYTHONPATH
contains them, but mkPoetryEnv
will probably install everything into a single site-packages, which should also be fine.