[56] JupyterHub: pyenv + IPKernel

Po zainstalowaniu JupyterHub/JupyterLab przez pyenv, logiczną konsekwencją jest udostępnienie dedykowanych dla wyróżnionych celów, izolowanych środowisk, z różnymi zestawami zainstalowanych pakietów.

Do ujawnienia przeszukiwanych ścieżek służy jupyter --paths:

config:
    /home/USER/.jupyter
    /home/USER/.pyenv/versions/3.X.X/envs/name/etc/jupyter
    /usr/local/etc/jupyter
    /etc/jupyter
data:
    /home/USER/.local/share/jupyter
    /home/USER/.pyenv/versions/3.8.2/envs/name/share/jupyter
    /usr/local/share/jupyter
    /usr/share/jupyter
runtime:
    /home/USER/.local/share/jupyter/runtime

Domyślnie narzędzia tworzą kernele w:

/home/USER/.local/share/jupyter/kernels/

jednak JupyterHub zainstalowany przez USER-a w pyenv i uruchomiony przez ROOT-a przez systemd śledzić będzie tylko lokalizację:

/home/USER/.pyenv/versions/3.X.X/envs/name/share/jupyter/kernels

Z tego powodu dla dodania nowego środowiska Pythona należy:

  • stworzyć odpowiednie środowisko:

    pyenv virtualenv 3.X.X NAME
    
  • zalogować się do niego, zainstalować pakiet dla kernela ipykernel i sprawdzić ścieżkę uruchamiania:

    pyenv activate NAME
    pip install ipykernel
    pyenv which python
    
  • co wskaże na ścieżkę:

    /home/USER/.pyenv/versions/NAME/bin/python
    
  • w lokalizacji /home/USER/.local/share/jupyter/kernels/ należy przygotować katalog NAME z plikiem kernel.json:

    {
     "argv": [ "/home/USER/.pyenv/versions/NAME/bin/python", "-m", "ipykernel",
          "-f", "{connection_file}"],
     "display_name": "NAME",
     "language": "python"
    }
    
  • i zlinkować ten katalog do ścieżki:

    /home/USER/.pyenv/versions/3.X.X/envs/name/share/jupyter/kernels
    

Od tej pory w JupyterLab powinno być dostępne dodatkowe środowisko NAME do uruchamiania notebooków.

Na końcu trzeba sprawdzić uprawnienia dostępu do dodanych katalogów konfiguracyjnych i środowisk Pythona.