0

I use one (project-independent, installed with pipx) jupyter notebook (or lab) installation, and then separate virtual environments for each project (using pipenv). If I open a notebook in one of the projects, it will run using the system python by default. If I want it to run using the virtual environment's python, I have to install ipykernel into the venv and the let the global jupyter installation know that it exists by running inside the venv python -m ipykernel install --user --name project-pipenv. I can then select the correct kernel from inside jupyter.

Now I have 20+ projects, so my list of kernels is rather long. Is it possible to automatically use the correct kernel?

Karalga
  • 495
  • 4
  • 11

1 Answers1

0

Rather than using one kernel definition by project, we can make the kernel definition pipenv-aware. Create (or edit/copy an existing kernel definition at ~/.local/share/jupyter/kernels/pipenv/kernel.json (linux) ~/Library/Jupyter/kernels/pipenv/kernel.json (Mac) or %APPDATA%\jupyter\kernels\pipenv\kernel.json (Windows):

{
 "argv": [
  "pipenv",
  "run",
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "pipenv",
 "language": "python",
 "metadata": {
  "debugger": true
 }
}

Now any notebook that sits in a pipenv project with ipykernel as a dependency will automatically use that kernel. This should be possible to adapt to poetry or others.

Karalga
  • 495
  • 4
  • 11