Code Monkey home page Code Monkey logo

gator's Introduction

Gator

The Mamba Navigator, a Web UI for managing conda environments

Binder Install with conda npm Github Actions Status Coverage Status Swagger Validator

Provides Conda/Mamba environment and package management as a standalone application or as extension for JupyterLab.

Install

Requirements

  • conda >= 4.5 or mamba >=0.5
  • JupyterLab 1.x, 2.x or 3.x (for the JupyterLab extension only)

Starting from 3.4, this extension will use mamba instead of conda if it finds it.

To install in the classical notebook:

mamba install -c conda-forge mamba_gator

To install in the JupyterLab:

mamba install -c conda-forge jupyterlab mamba_gator

If you use JupyterLab 1.x or 2.x, you can install the extension with the following command:

jupyter labextension install @mamba-org/gator-lab

Optionally, you could install jupyterlab-tour to add a help tour for the conda packages manager.

JupyterLab

This extension adds a new entry Conda Packages Manager in the Settings menu.

The first time, it can take quite some time to build the available packages list. But once it is obtained, it will be cached and updated to the background to have a smoother user experience.

jupyterlab_conda_extension

Gator (Mamba navigator)

This project contains a standalone navigator application sharing much of the code of the JupyterLab extension.

Classical Jupyter Notebook

The classical Jupyter Notebook is supported only for version prior to 5. But you can directly manage the conda environments with the standalone navigator tool. For that you need to execute the following command in a terminal:

gator

Creating New Environments

There are three ways to create an environment:

  • Create a new environment Use the New Environment button at the top of the page, and select Python 3, or R to create a base environment with the corresponding packages. Note that if you want to run a Jupyter python kernel in the new environment, you must also install the ipykernel package in the environment.

  • Clone an existing environment Click the clone button next to an environment in the list, and enter the desired name of the new environment.

  • Import an exported environment from a YAML file

Try it online

Open Gator (Mamba Navigator): Binder

Open JupyterLab: Binder

lab-launcher

Development

mamba create -c conda-forge -y -n gator python jupyterlab=3
mamba install -c conda-forge -y -n gator --file requirements_dev.txt
conda activate gator
pip install -e .
jupyter server extension enable mamba_gator --sys-prefix

yarn install
yarn run build:dev
jupyter labextension link packages/common/ packages/labextension/

Acknowledgements

This work started as a fork by @fcollonval of the Anaconda nb_conda package. The decision to fork it came due to apparently dead status of the previous package and a need to integrate it within JupyterLab.

Then with the mamba initiative pushed by QuantStack it made sense to move the project in the mamba-org organization.

Changelog

5.1.2

  • Security updates:
    • Bump handlebars from 4.7.6 to 4.7.7 (#143)
    • Bump hosted-git-info from 2.8.8 to 2.8.9 (#144)
    • Bump lodash from 4.17.20 to 4.17.21 (#145)
    • Bump browserslist from 4.16.1 to 4.16.6 (#146)
    • Bump ws from 7.4.2 to 7.4.6 (#148)
    • Bump postcss from 7.0.35 to 7.0.36 (#149)
    • Bump tar from 4.4.13 to 4.4.15 (#151)
    • Bump path-parse from 1.0.6 to 1.0.7 (#152)
    • Bump tar from 4.4.15 to 4.4.19 (#153)
  • Maintenance:
    • Add keywords and PyPI classifiers

5.1.1

  • Bug fix
    • Fix gator not displayed after updating or re-installing #139

5.1.0

  • Feature
    • Use much faster mamba repoquery search command to list packages instead of conda search #133 (Thanks to @ericpre)
  • Bug fix
    • Fix mamba detection on Windows #135 (Thanks to @ericpre)

5.0.0

  • Features
    • Update to JupyterLab 3 and the new Jupyter Server
      You don't need to install anything more than the pip or conda package.
    • Drop support for the classical notebook.

4.1.0

  • Features
    • Dependencies graph (by clicking on the installed version for now) #83
  • Bug fix
    • Fix missing classical notebook extension #115
    • Fix mamba not detected on Windows #119

4.0.0

  • Features
    • Moving to mamba-org
    • Integrate a standalone application
    • Common frontend for JupyterLab, classical Notebook and Gator
    • Depend optionally on nb_conda_kernels

3.4.1

  • Features
    • Better logger
  • Bugs
    • Reduce UI freezing time by running expensive code in asynchronous executor

3.4.0

  • Features
    • Use mamba if available. Otherwise use conda #46
    • Move to GitHub workflow (extend coverage to JupyterLab code)
  • Bugs
    • Fix wrong redirection url in classic notebook #47
    • Fix channel given by full URL not properly handle #55

3.3.1

  • Bugs
    • Fix export always from history (settings ignored)

3.3.0

  • Features
    • Add a settings fromHistory to export an environment using --from-history (available for conda >= 4.7.12) #39
  • Bugs
    • Fixes absent channeldata.json file #36
    • Fixes environment update absent from public API #37
  • Documentation
    • Start REST API description with Swagger

3.2.0

  • Available package cache file is now writable for everybody to avoid trouble in multi-user context. #25

  • Add update environment from file through REST endpoint PATCH /environments/ #26

  • Switch to newer Python syntax async-await

  • To improve UI reactivity in Jupyterlab:

    • Long running task can now be cancelled #32
    • The available packages list is used to find updatable package. conda update --dry-run --all is not used any longer. But it is still used if the user request updating all possible packages.

3.1.0

  • Request environment list accept now whitelist=0 or 1 query arguments. If 1, the environment list is filtered to respect KernelSpecManager.whitelist. Default is 0, but it could be modified in user settings.
  • JupyterLab extension
    • IEnvironmentManager.getPackageManager() returns always the same Conda.IPackageManager otherwise signaling package operations would have been meaningless.
    • Add ability to specify kernel companions; i.e. check that if some packages are installed in a kernel, they must respect a certain version range. Companions can be specified through user settings.
    • Small UI tweaks

3.0.0

  • Rework the server/client API to be more RESTful and returns 202 status for long operations
  • Cache available packages list in temp directory
  • Improve greatly the coverage for the server extension
  • JupyterLab extension only:
    • Allow the user to change the proposed environment when creating one from scratch
    • Add signals to handle environnements and packages changes (see labextension\src\__tests__\services.spec.ts)
    • Improve the UI reactivity by using react-virtualized for the packages list
    • Improve the look and feel
  • Available packages truncation has been removed.

2.5.1

  • Catch SSLError when requesting channeldata.json file

2.5.0

  • Export in YAML format the environment (import in the older format is still supported).
  • Improve responsiveness by loading first installed packages. Then request available one.
  • BUG error is prompt when an environment is deleted although everything went well
  • Cache some API requests (GET environments, GET channels and GET available packages).
  • Available packages are now truncated to 100.
    • Use query argument $skip to skip N first packages
    • If the list is longer than 100, a entry $next in the response is returned. This is the request url to use to get the next batch of packages.
  • Report full error message in web browser console to ease debugging.

2.4.2

  • BUG environment not shown
  • BUG Installing package in develop mode fails if in user home or containing spaces
  • Improve error feedback from API to frontend

2.4.1

  • BUG conda search crashes for conda 4.6

2.4.0

  • Add installation of package in development mode (through pip)

2.3.x

  • Add JupyterLab extension inspired by Anaconda Navigator
    • Retrieve conda package description
    • Add link to package website (if available)
  • Support conda >=4.5
  • Make all conda request asynchronously
  • Use the automatic installation for Jupyter Notebook extension (see here)

2.2.1

  • fix bug in check updates feature

2.2.0

  • support conda 4.3
  • support notebook security fix introduced in notebook 4.3.1

2.1.0

  • fix environment export button
  • allow environment names with one letter and validate against "suspicious" characters

2.0.0

  • update to new jupyter_conda_kernels naming scheme
  • namespace all API calls into /conda/

1.1.0

  • fix usage in root environment

1.0.1

  • minor build changes

1.0.0

  • Update to notebook 4.2

gator's People

Contributors

akhmerov avatar awkwong-whi avatar bollwyvl avatar damianavila avatar danilopeixoto avatar dependabot[bot] avatar ericpre avatar fcollonval avatar fjcapdevila avatar hbcarlos avatar johnne avatar jtpio avatar kalefranz avatar malev avatar mkcor avatar mmarchetti avatar parente avatar sylvaincorlay avatar tjd2002 avatar wolfv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

gator's Issues

Mamba still running after closing jupyterlab

Description

When gator is installed, mamba is still running after jupyter lab is closed: the GUI is closed but the mamba process is not completed and in the system monitor, I can see that mamba search --json is still running for about 1min 30s. Once this is done, the process is completed, i.e I can use the terminal prompt again.
If mamba is not running when closing jupyterlab, then this issue doesn't occur.

Reproduce

  1. Open jupyterlab
  2. Wait it is opened
  3. Close jupyterlab

Expected behavior

The process should be stop immediately once jupyterlab stops.

Context

  • Python package version: 5.0.0
  • Extension version: @mamba-org/gator-lab v3.0.0 enabled OK (python, mamba_gator)
  • General information:
     active environment : base
    active env location : /opt/miniconda3
            shell level : 1
       user config file : /home/eric/.condarc
 populated config files : /home/eric/.condarc
          conda version : 4.10.0
    conda-build version : 3.21.4
         python version : 3.8.8.final.0
       virtual packages : __cuda=11.2=0
                          __linux=5.11.10=0
                          __glibc=2.32=0
                          __unix=0=0
                          __archspec=1=x86_64
       base environment : /opt/miniconda3  (writable)
      conda av data dir : /opt/miniconda3/etc/conda
  conda av metadata url : https://repo.anaconda.com/pkgs/main
           channel URLs : https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
          package cache : /opt/miniconda3/pkgs
                          /home/eric/.conda/pkgs
       envs directories : /opt/miniconda3/envs
                          /home/eric/.conda/envs
               platform : linux-64
             user-agent : conda/4.10.0 requests/2.25.1 CPython/3.8.8 Linux/5.11.10-200.fc33.x86_64 fedora/33 glibc/2.32
                UID:GID : 1000:1000
             netrc file : None
           offline mode : False
Command Line Output
Paste the output from your command line running `jupyter lab` here, use `--debug` if possible.
Browser Output
Paste the output from your browser Javascript console here.

Click 'Conda Packages Manager' in 'Settings' has no effect

Description

Clicking Settings >> Conda Packages Manager doesn't do anything. Expected to open the packages manager.

Tried uninstalling & reinstallling both jupyterlab_conda and jupyterlab_toastify with the same result.

I believe the issue has something to do with the output below after entering jupyter lab in command line:

  • [jupyter_conda] No available packages list in cache [Errno 2] No such file or directory: '/var/folders/c_/9bhvtjtn47l_2756zh7fny880000gn/T/jupyter_conda_packages.json'.

Oddly, I'm able to locate this file.

  • Python package version: Python 3.7.7
  • Extension version: 3.2.0
  • General information:
    JupyterLab v2.1.2
    Known labextensions:
    app dir: /Users/miguel/anaconda3/envs/dev/share/jupyter/lab
    @aquirdturtle/collapsible_headings v2.2.0 enabled OK
    @jupyter-widgets/jupyterlab-manager v2.0.0 enabled OK
    @jupyterlab/git v0.20.0 enabled OK
    @jupyterlab/github v2.0.0 enabled OK
    @jupyterlab/toc v3.0.0 enabled OK
    @krassowski/jupyterlab_go_to_definition v1.0.0 enabled OK
    jupyterlab-execute-time v1.0.0 enabled OK
    jupyterlab_conda v2.0.0 enabled OK
    jupyterlab_toastify v3.0.0 enabled OK
    nbdime-jupyterlab v2.0.0 enabled OK
  • conda info results:
    active environment : dev
    active env location : /Users/miguel/anaconda3/envs/dev
    shell level : 2
    user config file : /Users/miguel/.condarc
    populated config files : /Users/miguel/.condarc
    conda version : 4.8.3
    conda-build version : 3.18.9
    python version : 3.7.4.final.0
    virtual packages : __osx=10.15.4
    base environment : /Users/miguel/anaconda3 (writable)
    channel URLs : https://repo.anaconda.com/pkgs/main/osx-64
    https://repo.anaconda.com/pkgs/main/noarch
    https://repo.anaconda.com/pkgs/r/osx-64
    https://repo.anaconda.com/pkgs/r/noarch
    package cache : /Users/miguel/anaconda3/pkgs
    /Users/miguel/.conda/pkgs
    envs directories : /Users/miguel/anaconda3/envs
    /Users/miguel/.conda/envs
    platform : osx-64
    user-agent : conda/4.8.3 requests/2.22.0 CPython/3.7.4 Darwin/19.4.0 OSX/10.15.4
    UID:GID : 501:20
    netrc file : /Users/miguel/.netrc
    offline mode : False
Command Line Output
Paste the output from your command line running `jupyter lab` here, use `--debug` if possible.
\[I 20:18:26.693 LabApp\] \[nb\_conda\_kernels\] enabled, 1 kernels found

[I 20:18:27.225 LabApp] The port 8888 is already in use, trying another port.

[I 20:18:27.240 LabApp] [jupyter_conda] enabled

[I 20:18:27.269 LabApp] [jupyter_nbextensions_configurator] enabled 0.4.1

[I 20:18:28.114 LabApp] JupyterLab extension loaded from /Users/miguel/anaconda3/envs/dev/lib/python3.7/site-packages/jupyterlab

[I 20:18:28.114 LabApp] JupyterLab application directory is /Users/miguel/anaconda3/envs/dev/share/jupyter/lab

[I 20:18:28.226 LabApp] Serving notebooks from local directory: /Users/miguel

[I 20:18:28.226 LabApp] The Jupyter Notebook is running at:

[I 20:18:28.226 LabApp] http://localhost:8889/?token=c909331d21392b7b8b782ee202ba64f97af6aeef6b8c051f

[I 20:18:28.226 LabApp] or http://127.0.0.1:8889/?token=c909331d21392b7b8b782ee202ba64f97af6aeef6b8c051f

[I 20:18:28.226 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

[C 20:18:28.234 LabApp]

To access the notebook, open this file in a browser:

file:///Users/miguel/Library/Jupyter/runtime/nbserver-8760-open.html

Or copy and paste one of these URLs:

http://localhost:8889/?token=c909331d21392b7b8b782ee202ba64f97af6aeef6b8c051f

or http://127.0.0.1:8889/?token=c909331d21392b7b8b782ee202ba64f97af6aeef6b8c051f

[W 20:18:32.059 LabApp] 404 GET /github?1589080711869 (::1) 134.55ms referer=http://localhost:8889/lab

[I 20:18:35.406 LabApp] Build is up to date

[jupyter_conda] No available packages list in cache [Errno 2] No such file or directory: '/var/folders/c_/9bhvtjtn47l_2756zh7fny880000gn/T/jupyter_conda_packages.json'.

Browser Output
Paste the output from your browser Javascript console here.
Not sure how to do this...

select location of new env

Hello,
I use jupyter_conda in an environment where jupyter itself is installed to /opt/conda... as system installation
is it still possible to have the oppotunity to select the location of a new environment ? (e.g. the users home)

First initialization not ending

image

# packages in environment at D:\anaconda3:
#
# Name                    Version                   Build  Channel
jupyterlab                3.0.11             pyhd3eb1b0_0
jupyterlab_pygments       0.1.2                      py_0
jupyterlab_server         2.3.0              pyhd3eb1b0_0
jupyterlab_widgets        1.0.0              pyhd3eb1b0_1
[D 2021-03-24 17:32:13.212 ServerApp] 200 GET /api/sessions?1616578333203 (::1) 2.99ms
[D 2021-03-24 17:32:15.056 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:15.057 ServerApp] Found kernel python3 in D:\anaconda3\share\jupyter\kernels
[D 2021-03-24 17:32:15.059 ServerApp] 200 GET /api/kernelspecs?1616578335050 (::1) 2.99ms
[D 2021-03-24 17:32:19.930 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:19.933 ServerApp] 200 GET /api/contents?content=1&1616578339923 (::1) 2.99ms
[D 2021-03-24 17:32:23.190 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:23.192 ServerApp] 200 GET /api/kernels?1616578343183 (::1) 2.01ms
[D 2021-03-24 17:32:23.215 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:23.216 ServerApp] 200 GET /api/terminals?1616578343209 (::1) 1.99ms
[D 2021-03-24 17:32:23.225 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:23.227 ServerApp] 200 GET /api/sessions?1616578343216 (::1) 2.03ms
[D 2021-03-24 17:32:29.945 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:29.947 ServerApp] 200 GET /api/contents?content=1&1616578349937 (::1) 2.01ms
[D 2021-03-24 17:32:33.203 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:33.204 ServerApp] 200 GET /api/kernels?1616578353197 (::1) 1.02ms
[D 2021-03-24 17:32:33.232 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:33.233 ServerApp] 200 GET /api/terminals?1616578353223 (::1) 1.97ms
[D 2021-03-24 17:32:33.238 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:33.240 ServerApp] 200 GET /api/sessions?1616578353231 (::1) 2.00ms
[D 2021-03-24 17:32:39.961 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:39.963 ServerApp] 200 GET /api/contents?content=1&1616578359951 (::1) 3.03ms
[D 2021-03-24 17:32:43.215 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:43.216 ServerApp] 200 GET /api/kernels?1616578363207 (::1) 1.00ms
[D 2021-03-24 17:32:43.245 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:43.247 ServerApp] 200 GET /api/terminals?1616578363237 (::1) 2.00ms
[D 2021-03-24 17:32:43.251 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:43.252 ServerApp] 200 GET /api/sessions?1616578363243 (::1) 1.00ms
[D 2021-03-24 17:32:49.973 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:49.975 ServerApp] 200 GET /api/contents?content=1&1616578369966 (::1) 2.00ms
[D 2021-03-24 17:32:53.226 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:53.227 ServerApp] 200 GET /api/kernels?1616578373220 (::1) 1.00ms
[D 2021-03-24 17:32:53.259 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:53.260 ServerApp] 200 GET /api/terminals?1616578373252 (::1) 1.99ms
[D 2021-03-24 17:32:53.267 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:32:53.268 ServerApp] 200 GET /api/sessions?1616578373258 (::1) 0.99ms
[D 2021-03-24 17:33:00.191 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:00.193 ServerApp] 200 GET /api/contents?content=1&1616578379979 (::1) 2.99ms
[D 2021-03-24 17:33:03.239 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:03.240 ServerApp] 200 GET /api/kernels?1616578383232 (::1) 1.00ms
[D 2021-03-24 17:33:03.272 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:03.274 ServerApp] 200 GET /api/terminals?1616578383266 (::1) 1.97ms
[D 2021-03-24 17:33:03.281 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:03.282 ServerApp] 200 GET /api/sessions?1616578383271 (::1) 1.99ms
[D 2021-03-24 17:33:10.205 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:10.207 ServerApp] 200 GET /api/contents?content=1&1616578390197 (::1) 2.00ms
[D 2021-03-24 17:33:13.254 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:13.255 ServerApp] 200 GET /api/kernels?1616578393245 (::1) 0.83ms
[D 2021-03-24 17:33:13.288 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:13.290 ServerApp] 200 GET /api/terminals?1616578393280 (::1) 2.02ms
[D 2021-03-24 17:33:13.293 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:13.294 ServerApp] 200 GET /api/sessions?1616578393285 (::1) 1.01ms
[D 2021-03-24 17:33:16.073 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:16.075 ServerApp] Found kernel python3 in D:\anaconda3\share\jupyter\kernels
[D 2021-03-24 17:33:16.077 ServerApp] 200 GET /api/kernelspecs?1616578396065 (::1) 4.98ms
[D 2021-03-24 17:33:20.217 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:20.219 ServerApp] 200 GET /api/contents?content=1&1616578400210 (::1) 1.99ms
[D 2021-03-24 17:33:23.266 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:23.267 ServerApp] 200 GET /api/kernels?1616578403258 (::1) 1.03ms
[D 2021-03-24 17:33:23.303 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:23.304 ServerApp] 200 GET /api/terminals?1616578403293 (::1) 1.00ms
[D 2021-03-24 17:33:23.306 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:23.307 ServerApp] 200 GET /api/sessions?1616578403298 (::1) 2.00ms
[D 2021-03-24 17:33:30.231 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:30.233 ServerApp] 200 GET /api/contents?content=1&1616578410224 (::1) 2.04ms
[D 2021-03-24 17:33:33.279 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:33.280 ServerApp] 200 GET /api/kernels?1616578413272 (::1) 2.00ms
[D 2021-03-24 17:33:33.314 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:33.315 ServerApp] 200 GET /api/terminals?1616578413308 (::1) 1.00ms
[D 2021-03-24 17:33:33.317 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:33:33.319 ServerApp] 200 GET /api/sessions?1616578413309 (::1) 2.00ms
[D 2021-03-24 17:35:42.748 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:35:42.750 ServerApp] 200 GET /api/kernels?1616578542707 (::1) 2.99ms
[D 2021-03-24 17:35:42.751 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:35:42.753 ServerApp] 200 GET /api/sessions?1616578542710 (::1) 2.00ms
[D 2021-03-24 17:35:42.754 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:35:42.756 ServerApp] 200 GET /api/terminals?1616578542709 (::1) 2.99ms
[D 2021-03-24 17:35:49.692 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:35:49.695 ServerApp] 200 GET /api/contents?content=1&1616578549685 (::1) 3.99ms
[D 2021-03-24 17:35:52.771 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:35:52.772 ServerApp] 200 GET /api/kernels?1616578552763 (::1) 2.04ms
[D 2021-03-24 17:35:52.776 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:35:52.780 ServerApp] 200 GET /api/sessions?1616578552764 (::1) 4.33ms
[D 2021-03-24 17:35:52.780 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:35:52.781 ServerApp] 200 GET /api/terminals?1616578552766 (::1) 1.01ms
[D 2021-03-24 17:35:59.708 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:35:59.710 ServerApp] 200 GET /api/contents?content=1&1616578559700 (::1) 2.00ms
[D 2021-03-24 17:36:02.789 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:02.790 ServerApp] 200 GET /api/kernels?1616578562781 (::1) 1.99ms
[D 2021-03-24 17:36:02.792 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:02.793 ServerApp] 200 GET /api/sessions?1616578562783 (::1) 1.00ms
[D 2021-03-24 17:36:02.795 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:02.796 ServerApp] 200 GET /api/terminals?1616578562785 (::1) 1.00ms
[D 2021-03-24 17:36:10.165 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:10.167 ServerApp] 200 GET /api/contents?content=1&1616578570125 (::1) 2.99ms
[D 2021-03-24 17:36:12.807 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:12.808 ServerApp] 200 GET /api/kernels?1616578572797 (::1) 1.99ms
[D 2021-03-24 17:36:12.810 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:12.811 ServerApp] 200 GET /api/sessions?1616578572800 (::1) 2.15ms
[D 2021-03-24 17:36:12.812 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:12.813 ServerApp] 200 GET /api/terminals?1616578572802 (::1) 1.01ms
[D 2021-03-24 17:36:22.818 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:22.820 ServerApp] 200 GET /api/kernels?1616578582812 (::1) 1.99ms
[D 2021-03-24 17:36:22.822 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:22.823 ServerApp] 200 GET /api/sessions?1616578582815 (::1) 2.00ms
[D 2021-03-24 17:36:22.829 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:22.831 ServerApp] 200 GET /api/terminals?1616578582820 (::1) 1.00ms
[D 2021-03-24 17:36:30.691 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:30.694 ServerApp] 200 GET /api/contents?content=1&1616578590685 (::1) 2.99ms
[D 2021-03-24 17:36:32.833 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:32.834 ServerApp] 200 GET /api/kernels?1616578592826 (::1) 1.99ms
[D 2021-03-24 17:36:32.840 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:32.841 ServerApp] 200 GET /api/sessions?1616578592830 (::1) 1.00ms
[D 2021-03-24 17:36:32.843 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:32.846 ServerApp] 200 GET /api/terminals?1616578592834 (::1) 1.99ms
[D 2021-03-24 17:36:51.705 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:51.709 ServerApp] 200 GET /api/contents?content=1&1616578611697 (::1) 3.97ms
[D 2021-03-24 17:36:53.750 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:53.752 ServerApp] 200 GET /api/kernels?1616578613738 (::1) 1.99ms
[D 2021-03-24 17:36:53.753 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:53.757 ServerApp] 200 GET /api/sessions?1616578613741 (::1) 3.99ms
[D 2021-03-24 17:36:53.759 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:36:53.762 ServerApp] 200 GET /api/terminals?1616578613744 (::1) 2.99ms
[D 2021-03-24 17:37:01.903 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:01.906 ServerApp] 200 GET /api/contents?content=1&1616578621892 (::1) 3.00ms
[D 2021-03-24 17:37:03.987 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:03.989 ServerApp] 200 GET /api/kernels?1616578623977 (::1) 3.00ms
[D 2021-03-24 17:37:04.102 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:04.106 ServerApp] 200 GET /api/sessions?1616578624093 (::1) 4.00ms
[D 2021-03-24 17:37:04.108 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:04.109 ServerApp] 200 GET /api/terminals?1616578624094 (::1) 2.01ms
[D 2021-03-24 17:37:12.065 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:12.067 ServerApp] 200 GET /api/contents?content=1&1616578632057 (::1) 1.99ms
[D 2021-03-24 17:37:14.103 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:14.105 ServerApp] 200 GET /api/kernels?1616578634096 (::1) 1.98ms
[D 2021-03-24 17:37:14.118 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:14.119 ServerApp] 200 GET /api/sessions?1616578634111 (::1) 1.99ms
[D 2021-03-24 17:37:14.121 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:14.123 ServerApp] 200 GET /api/terminals?1616578634113 (::1) 1.00ms
[D 2021-03-24 17:37:21.701 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:21.703 ServerApp] Found kernel python3 in D:\anaconda3\share\jupyter\kernels
[D 2021-03-24 17:37:21.705 ServerApp] 200 GET /api/kernelspecs?1616578641694 (::1) 6.01ms
[D 2021-03-24 17:37:22.079 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:22.081 ServerApp] 200 GET /api/contents?content=1&1616578642074 (::1) 1.99ms
[D 2021-03-24 17:37:24.122 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:24.123 ServerApp] 200 GET /api/kernels?1616578644114 (::1) 1.99ms
[D 2021-03-24 17:37:24.132 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:24.134 ServerApp] 200 GET /api/sessions?1616578644126 (::1) 2.97ms
[D 2021-03-24 17:37:24.139 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:24.140 ServerApp] 200 GET /api/terminals?1616578644131 (::1) 0.99ms
[D 2021-03-24 17:37:32.095 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:32.097 ServerApp] 200 GET /api/contents?content=1&1616578652087 (::1) 2.29ms
[D 2021-03-24 17:37:34.138 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:34.140 ServerApp] 200 GET /api/kernels?1616578654128 (::1) 1.98ms
[D 2021-03-24 17:37:34.159 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:34.160 ServerApp] 200 GET /api/sessions?1616578654141 (::1) 1.98ms
[D 2021-03-24 17:37:34.161 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:34.164 ServerApp] 200 GET /api/terminals?1616578654145 (::1) 3.01ms
[D 2021-03-24 17:37:42.111 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:42.114 ServerApp] 200 GET /api/contents?content=1&1616578662103 (::1) 3.00ms
[D 2021-03-24 17:37:44.186 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:44.187 ServerApp] 200 GET /api/kernels?1616578664158 (::1) 1.99ms
[D 2021-03-24 17:37:44.191 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:44.194 ServerApp] 200 GET /api/sessions?1616578664173 (::1) 2.99ms
[D 2021-03-24 17:37:44.196 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:44.201 ServerApp] 200 GET /api/terminals?1616578664175 (::1) 5.99ms
[D 2021-03-24 17:37:52.126 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:52.128 ServerApp] 200 GET /api/contents?content=1&1616578672120 (::1) 1.98ms
[D 2021-03-24 17:37:54.209 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:54.211 ServerApp] 200 GET /api/kernels?1616578674203 (::1) 1.98ms
[D 2021-03-24 17:37:54.227 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:54.229 ServerApp] 200 GET /api/sessions?1616578674217 (::1) 1.99ms
[D 2021-03-24 17:37:54.230 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:37:54.285 ServerApp] 200 GET /api/terminals?1616578674219 (::1) 54.85ms
[D 2021-03-24 17:38:02.140 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:02.144 ServerApp] 200 GET /api/contents?content=1&1616578682133 (::1) 4.99ms
[D 2021-03-24 17:38:04.232 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:04.234 ServerApp] 200 GET /api/kernels?1616578684222 (::1) 0.99ms
[D 2021-03-24 17:38:04.293 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:04.296 ServerApp] 200 GET /api/sessions?1616578684286 (::1) 3.99ms
[D 2021-03-24 17:38:04.299 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:04.300 ServerApp] 200 GET /api/terminals?1616578684290 (::1) 2.00ms
[D 2021-03-24 17:38:12.157 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:12.159 ServerApp] 200 GET /api/contents?content=1&1616578692150 (::1) 2.98ms
[D 2021-03-24 17:38:14.245 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:14.246 ServerApp] 200 GET /api/kernels?1616578694239 (::1) 1.00ms
[D 2021-03-24 17:38:14.307 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:14.309 ServerApp] 200 GET /api/sessions?1616578694300 (::1) 1.99ms
[D 2021-03-24 17:38:14.311 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:14.312 ServerApp] 200 GET /api/terminals?1616578694305 (::1) 1.99ms
[D 2021-03-24 17:38:22.171 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:22.174 ServerApp] 200 GET /api/contents?content=1&1616578702165 (::1) 3.01ms
[D 2021-03-24 17:38:22.717 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:22.718 ServerApp] Found kernel python3 in D:\anaconda3\share\jupyter\kernels
[D 2021-03-24 17:38:22.720 ServerApp] 200 GET /api/kernelspecs?1616578702710 (::1) 4.01ms
[D 2021-03-24 17:38:24.257 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:24.258 ServerApp] 200 GET /api/kernels?1616578704251 (::1) 0.98ms
[D 2021-03-24 17:38:24.321 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:24.323 ServerApp] 200 GET /api/sessions?1616578704315 (::1) 1.99ms
[D 2021-03-24 17:38:24.324 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:24.325 ServerApp] 200 GET /api/terminals?1616578704317 (::1) 1.99ms
[D 2021-03-24 17:38:32.190 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:32.192 ServerApp] 200 GET /api/contents?content=1&1616578712182 (::1) 3.01ms
[D 2021-03-24 17:38:34.271 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:34.274 ServerApp] 200 GET /api/kernels?1616578714264 (::1) 2.99ms
[D 2021-03-24 17:38:34.334 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:34.336 ServerApp] 200 GET /api/sessions?1616578714328 (::1) 1.99ms
[D 2021-03-24 17:38:34.341 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:34.342 ServerApp] 200 GET /api/terminals?1616578714333 (::1) 0.99ms
[D 2021-03-24 17:38:42.204 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:42.206 ServerApp] 200 GET /api/contents?content=1&1616578722197 (::1) 2.00ms
[D 2021-03-24 17:38:44.286 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:44.287 ServerApp] 200 GET /api/kernels?1616578724279 (::1) 1.02ms
[D 2021-03-24 17:38:44.351 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:44.352 ServerApp] 200 GET /api/sessions?1616578724344 (::1) 1.98ms
[D 2021-03-24 17:38:44.354 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:44.356 ServerApp] 200 GET /api/terminals?1616578724347 (::1) 2.01ms
[D 2021-03-24 17:38:52.218 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:52.220 ServerApp] 200 GET /api/contents?content=1&1616578732212 (::1) 2.97ms
[D 2021-03-24 17:38:54.300 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:54.301 ServerApp] 200 GET /api/kernels?1616578734294 (::1) 1.10ms
[D 2021-03-24 17:38:54.365 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:54.367 ServerApp] 200 GET /api/sessions?1616578734359 (::1) 1.99ms
[D 2021-03-24 17:38:54.369 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:38:54.370 ServerApp] 200 GET /api/terminals?1616578734361 (::1) 2.00ms
[D 2021-03-24 17:39:02.236 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:02.238 ServerApp] 200 GET /api/contents?content=1&1616578742228 (::1) 2.32ms
[D 2021-03-24 17:39:04.312 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:04.313 ServerApp] 200 GET /api/kernels?1616578744307 (::1) 0.98ms
[D 2021-03-24 17:39:04.378 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:04.380 ServerApp] 200 GET /api/sessions?1616578744372 (::1) 1.99ms
[D 2021-03-24 17:39:04.382 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:04.383 ServerApp] 200 GET /api/terminals?1616578744374 (::1) 2.01ms
[D 2021-03-24 17:39:12.249 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:12.252 ServerApp] 200 GET /api/contents?content=1&1616578752242 (::1) 2.99ms
[D 2021-03-24 17:39:14.325 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:14.326 ServerApp] 200 GET /api/kernels?1616578754319 (::1) 1.00ms
[D 2021-03-24 17:39:14.391 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:14.392 ServerApp] 200 GET /api/sessions?1616578754385 (::1) 0.98ms
[D 2021-03-24 17:39:14.394 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:14.398 ServerApp] 200 GET /api/terminals?1616578754389 (::1) 3.99ms
[D 2021-03-24 17:39:22.264 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:22.266 ServerApp] 200 GET /api/contents?content=1&1616578762257 (::1) 3.03ms
[D 2021-03-24 17:39:23.733 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:23.734 ServerApp] Found kernel python3 in D:\anaconda3\share\jupyter\kernels
[D 2021-03-24 17:39:23.736 ServerApp] 200 GET /api/kernelspecs?1616578763727 (::1) 3.99ms
[D 2021-03-24 17:39:24.340 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:24.342 ServerApp] 200 GET /api/kernels?1616578764333 (::1) 2.98ms
[D 2021-03-24 17:39:24.406 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:24.408 ServerApp] 200 GET /api/sessions?1616578764399 (::1) 3.00ms
[D 2021-03-24 17:39:24.413 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:24.415 ServerApp] 200 GET /api/terminals?1616578764404 (::1) 3.41ms
[D 2021-03-24 17:39:32.276 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:32.279 ServerApp] 200 GET /api/contents?content=1&1616578772270 (::1) 3.00ms
[D 2021-03-24 17:39:34.354 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:34.355 ServerApp] 200 GET /api/kernels?1616578774346 (::1) 0.99ms
[D 2021-03-24 17:39:34.425 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:34.427 ServerApp] 200 GET /api/sessions?1616578774419 (::1) 1.99ms
[D 2021-03-24 17:39:34.430 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:34.433 ServerApp] 200 GET /api/terminals?1616578774421 (::1) 2.98ms
[D 2021-03-24 17:39:42.293 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:42.295 ServerApp] 200 GET /api/contents?content=1&1616578782285 (::1) 2.00ms
[D 2021-03-24 17:39:44.366 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:44.367 ServerApp] 200 GET /api/kernels?1616578784360 (::1) 2.00ms
[D 2021-03-24 17:39:44.442 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:44.444 ServerApp] 200 GET /api/sessions?1616578784435 (::1) 2.99ms
[D 2021-03-24 17:39:44.446 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:44.448 ServerApp] 200 GET /api/terminals?1616578784438 (::1) 2.00ms
[D 2021-03-24 17:39:52.306 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:52.309 ServerApp] 200 GET /api/contents?content=1&1616578792299 (::1) 2.99ms
[D 2021-03-24 17:39:54.378 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:54.379 ServerApp] 200 GET /api/kernels?1616578794373 (::1) 2.05ms
[D 2021-03-24 17:39:54.458 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:54.460 ServerApp] 200 GET /api/sessions?1616578794450 (::1) 3.01ms
[D 2021-03-24 17:39:54.461 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:39:54.462 ServerApp] 200 GET /api/terminals?1616578794452 (::1) 1.00ms
[D 2021-03-24 17:40:02.321 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:40:02.323 ServerApp] 200 GET /api/contents?content=1&1616578802314 (::1) 3.01ms
[D 2021-03-24 17:40:04.391 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:40:04.392 ServerApp] 200 GET /api/kernels?1616578804385 (::1) 1.00ms
[D 2021-03-24 17:40:04.471 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:40:04.473 ServerApp] 200 GET /api/sessions?1616578804465 (::1) 2.00ms
[D 2021-03-24 17:40:04.474 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:40:04.476 ServerApp] 200 GET /api/terminals?1616578804466 (::1) 1.99ms
[D 2021-03-24 17:40:12.338 ServerApp] Accepting token-authenticated connection from ::1
[D 2021-03-24 17:40:12.343 ServerApp] 200 GET /api/contents?content=1&1616578812330 (::1) 5.97ms

Originally posted by @hackeye in #86 (comment)

Support version selection

Add the ability to choose the package version, user wants to get.

Need changes in backend and frontend.

Failed to Retrieve Packages

Description

When loading into the conda package manager, I get the message "an error occurred while retrieving available packages", and the package list is not populated.

Weirdly, it seems to work sometimes. I launch using JupyterHub, so occasionally my launched session will work, but will fail if I try to launch again.

Reproduce

  1. Go to Settings > Conda package manager
  2. Click on one of the environments

Expected behavior

List gets populated with conda packages.

Context

I am using JupyterHub and BatchSpawner to batch JupyterLab session using the Slurm scheduler. Not sure what to make of the logs pasted below.

  • Python package version: 4.1.0
  • Extension version: 2.1.0
  • General information:
     active environment : jupyter-2-1
    active env location : /modules/apps/miniconda/4.8.3/envs/jupyter-2-1
            shell level : 1
       user config file : /root/.condarc
 populated config files : /root/.condarc
          conda version : 4.9.2
    conda-build version : not installed
         python version : 3.8.3.final.0
       virtual packages : __glibc=2.31=0
                          __unix=0=0
                          __archspec=1=x86_64
       base environment : /modules/apps/miniconda/4.8.3  (writable)
           channel URLs : https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://repo.anaconda.com/pkgs/main/linux-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/linux-64
                          https://repo.anaconda.com/pkgs/r/noarch
          package cache : /modules/apps/miniconda/4.8.3/pkgs
                          /root/.conda/pkgs
       envs directories : /modules/apps/miniconda/4.8.3/envs
                          /root/.conda/envs
               platform : linux-64
             user-agent : conda/4.9.2 requests/2.23.0 CPython/3.8.3 Linux/5.4.0-62-generic ubuntu/20.04.1 glibc/2.31
                UID:GID : 0:0
             netrc file : None
           offline mode : False
Command Line Output
[I 2021-01-24 20:37:21.582 SingleUserNotebookApp.mamba_gator handlers:373] No available packages list in cache.
[I 2021-01-24 20:37:21.583 SingleUserNotebookApp log:181] 202 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/conda/packages?1611520639672 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 2.91ms
[I 2021-01-24 20:37:22.640 SingleUserNotebookApp build_handler:47] Build is up to date
[I 2021-01-24 20:37:22.647 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/lab/api/build?1611520639220 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 3344.01ms
[I 2021-01-24 20:37:22.650 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/lab/api/settings/@jupyterlab/docmanager-extension:plugin?1611520639748 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 8.47ms
[I 2021-01-24 20:37:24.314 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/git/settings?version=0.23.3&1611520639676 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 1670.57ms
[I 2021-01-24 20:37:24.319 SingleUserNotebookApp log:181] 202 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/conda/tasks/1?1611520642638 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 3.79ms
[I 2021-01-24 20:37:24.326 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/metrics?1611520642642 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 9.00ms
[I 2021-01-24 20:37:24.559 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/lab/api/workspaces/lab?1611520644424 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 4.94ms
[I 2021-01-24 20:37:24.820 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/lab/api/settings?1611520644689 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 80.50ms
-[I 2021-01-24 20:37:25.199 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/conda/environments?whitelist=0&1611520644615 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 524.83ms
\[I 2021-01-24 20:37:25.289 SingleUserNotebookApp log:181] 204 PUT /panel/jhub-dev/user/hsaplakoglu_umass_edu/lab/api/workspaces/lab?1611520645230 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 7.24ms
|[I 2021-01-24 20:37:25.401 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/api/contents/home/hsaplakoglu_umass_edu?1611520645291 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 60.62ms
[E 2021-01-24 20:37:25.448 SingleUserNotebookApp log:173] {
      "X-Forwarded-Proto": "http",
      "X-Forwarded-Port": "80",
      "Connection": "close",
      "X-Forwarded-Server": "unity.rc.umass.edu",
      "X-Forwarded-Host": "unity.rc.umass.edu",
      "X-Forwarded-For": "10.1.10.8,::ffff:127.0.0.1",
      "X-Remote-User": "[email protected]",
      "Cookie": "",
      "Accept-Language": "en-US,en;q=0.9,tr;q=0.8,la;q=0.7",
      "Accept-Encoding": "gzip, deflate, br",
      "Referer": "https://unity.rc.umass.edu/panel/jhub-dev/user/hsaplakoglu_umass_edu/lab",
      "Sec-Fetch-Dest": "empty",
      "Sec-Fetch-Mode": "cors",
      "Sec-Fetch-Site": "same-origin",
      "Accept": "*/*",
      "Content-Type": "application/json",
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36",
      "Sec-Ch-Ua-Mobile": "?0",
      "X-Xsrftoken": "2|5dee9d01|ca0d3126166b92212b18eb005a6b8ca2|1611516169",
      "Dnt": "1",
      "Authorization": "token [secret]",
      "Sec-Ch-Ua": "\"Google Chrome\";v=\"87\", \" Not;A Brand\";v=\"99\", \"Chromium\";v=\"87\"",
      "Host": "unity.rc.umass.edu"
    }
[E 2021-01-24 20:37:25.448 SingleUserNotebookApp log:181] 500 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/conda/tasks/1?1611520645395 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 1.83ms
/[I 2021-01-24 20:37:25.499 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/api/contents/home/hsaplakoglu_umass_edu?content=1&1611520645423 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 25.29ms
-[E 2021-01-24 20:37:25.606 SingleUserNotebookApp log:173] {
      "X-Forwarded-Proto": "http",
      "X-Forwarded-Port": "80",
      "Connection": "close",
      "Content-Length": "45",
      "X-Forwarded-Server": "unity.rc.umass.edu",
      "X-Forwarded-Host": "unity.rc.umass.edu",
      "X-Forwarded-For": "10.1.10.8,::ffff:127.0.0.1",
      "X-Remote-User": "[email protected]",
      "Cookie": "",
      "Accept-Language": "en-US,en;q=0.9,tr;q=0.8,la;q=0.7",
      "Accept-Encoding": "gzip, deflate, br",
      "Referer": "https://unity.rc.umass.edu/panel/jhub-dev/user/hsaplakoglu_umass_edu/lab",
      "Sec-Fetch-Dest": "empty",
      "Sec-Fetch-Mode": "cors",
      "Sec-Fetch-Site": "same-origin",
      "Origin": "https://unity.rc.umass.edu",
      "Accept": "*/*",
      "Content-Type": "text/plain;charset=UTF-8",
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36",
      "Sec-Ch-Ua-Mobile": "?0",
      "X-Xsrftoken": "2|5dee9d01|ca0d3126166b92212b18eb005a6b8ca2|1611516169",
      "Dnt": "1",
      "Authorization": "token [secret]",
      "Sec-Ch-Ua": "\"Google Chrome\";v=\"87\", \" Not;A Brand\";v=\"99\", \"Chromium\";v=\"87\"",
      "Host": "unity.rc.umass.edu"
    }
[E 2021-01-24 20:37:25.606 SingleUserNotebookApp log:181] 500 POST /panel/jhub-dev/user/hsaplakoglu_umass_edu/git/show_top_level?1611520645508 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 43.73ms
[E 2021-01-24 20:37:25.625 SingleUserNotebookApp log:173] {
      "X-Forwarded-Proto": "http",
      "X-Forwarded-Port": "80",
      "Connection": "close",
      "Content-Length": "45",
      "X-Forwarded-Server": "unity.rc.umass.edu",
      "X-Forwarded-Host": "unity.rc.umass.edu",
      "X-Forwarded-For": "10.1.10.8,::ffff:127.0.0.1",
      "X-Remote-User": "[email protected]",
      "Cookie": "",
      "Accept-Language": "en-US,en;q=0.9,tr;q=0.8,la;q=0.7",
      "Accept-Encoding": "gzip, deflate, br",
      "Referer": "https://unity.rc.umass.edu/panel/jhub-dev/user/hsaplakoglu_umass_edu/lab",
      "Sec-Fetch-Dest": "empty",
      "Sec-Fetch-Mode": "cors",
      "Sec-Fetch-Site": "same-origin",
      "Origin": "https://unity.rc.umass.edu",
      "Accept": "*/*",
      "Content-Type": "text/plain;charset=UTF-8",
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36",
      "Sec-Ch-Ua-Mobile": "?0",
      "X-Xsrftoken": "2|5dee9d01|ca0d3126166b92212b18eb005a6b8ca2|1611516169",
      "Dnt": "1",
      "Authorization": "token [secret]",
      "Sec-Ch-Ua": "\"Google Chrome\";v=\"87\", \" Not;A Brand\";v=\"99\", \"Chromium\";v=\"87\"",
      "Host": "unity.rc.umass.edu"
    }
[E 2021-01-24 20:37:25.626 SingleUserNotebookApp log:181] 500 POST /panel/jhub-dev/user/hsaplakoglu_umass_edu/git/show_top_level?1611520645513 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 52.23ms
\[I 2021-01-24 20:37:25.721 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/api/contents/home/hsaplakoglu_umass_edu?content=1&1611520645596 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 26.82ms
|[I 2021-01-24 20:37:25.820 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/conda/channels?1611520645251 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 518.39ms
\[I 2021-01-24 20:37:26.077 SingleUserNotebookApp log:181] 204 PUT /panel/jhub-dev/user/hsaplakoglu_umass_edu/lab/api/workspaces/lab?1611520646020 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 7.29ms
/[I 2021-01-24 20:37:27.500 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/conda/environments/base?1611520645840 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 1611.14ms
-[I 2021-01-24 20:37:27.971 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/metrics?1611520647908 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 13.60ms
|[I 2021-01-24 20:37:29.014 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/conda/environments/base?1611520647676 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 1292.29ms
/[I 2021-01-24 20:37:29.175 SingleUserNotebookApp log:181] 200 GET /panel/jhub-dev/user/hsaplakoglu_umass_edu/conda/packages?1611520649120 (hsaplakoglu_umass_edu@::ffff:127.0.0.1) 2.13ms
Browser Output
feature.js:7 @krassowski/jupyterlab-lsp:signature settings schema could not be found and was not loaded
de @ feature.js:7
git/show_top_level?1611522769651:1 Failed to load resource: the server responded with a status of 500 (Internal Server Error)
git/show_top_level?1611522769890:1 Failed to load resource: the server responded with a status of 500 (Internal Server Error)
services.js:426 (intermediate value) is not iterable (cannot read property undefined)
(anonymous) @ services.js:426
CondaPkgPanel.js:105 Error: An error occurred while retrieving available packages.
    at u. (services.js:429)
    at Generator.next ()
    at a (services.js:5)
(anonymous) @ CondaPkgPanel.js:105
services.js:426 (intermediate value) is not iterable (cannot read property undefined)
(anonymous) @ services.js:426
CondaPkgPanel.js:105 Error: An error occurred while retrieving available packages.
    at u. (services.js:429)
    at Generator.next ()
    at a (services.js:5)
(anonymous) @ CondaPkgPanel.js:105
services.js:426 (intermediate value) is not iterable (cannot read property undefined)
(anonymous) @ services.js:426
CondaPkgPanel.js:105 Error: An error occurred while retrieving available packages.
    at u. (services.js:429)
    at Generator.next ()
    at a (services.js:5)
(anonymous) @ CondaPkgPanel.js:105

Thanks for your help!

Improve backend

List tasks that could improve the backend:

  • Forbid removing ipython kernel and base language package (otherwise the environment get broken)
  • More RESTful API - the current one is bad in that respect (see there)
  • Use same calling convention to RESTful API (currently notebook uses AJAX but lab uses JSON data)
  • (useful ?) Export in YAML format
  • [ ] Allow POST to change generic conda command options
  • Make subprocess call asynchronous (if it is possible) - the timeout when checking for update could then be removed

Improve package dependency graph integration

What do you think of this mock-up?

The idea is to add an icon in the toolbar above the packages list (it will be absent if mamba is not available - or disabled with a title advertising mamba 😉 ).
On click on the button, this would open the dependency panel (not sure if on the right of the package list is a good place or if it needs to be a separated panel to allow positioning and resize by the user).

Then selecting a package will result in the display of its dependencies graph. If not package selected, a help message such Select a package to display its dependency graph.

This means also to change the current behavior as onClick on a row changes the status of the package. This should then be restricted to the status icon probably.

image

Originally posted by @fcollonval in #102 (comment)

Metadata for environment name is not correct here

That statement is wrong:

https://github.com/fcollonval/jupyter_conda/blob/a7fd182a6b6a47a7ca48b545ba946e2937fcf4b1/labextension/src/validator.ts#L215-L217

The environment name set by nb_conda_kernels is built from the env directory basename. But some element are added to make it unique. So actually here what is needed is to use the directory basename from the path metadata.

https://github.com/Anaconda-Platform/nb_conda_kernels/blob/7422ba97c732e792b9afb92ebe0316102c20606e/nb_conda_kernels/manager.py#L132

Note: The API is therefore maybe wrong to handle environments with similar names but different prefix.

Environments not showing up in the package manager while included in Jupyterlab

I'm trying to include this extension to my jupyterlab since I'm trying to manage the environments through UI. While trying out to install with the following steps in jupyterlab terminal

conda install -c conda-forge jupyter_conda
jupyter labextension install jupyterlab_toastify jupyterlab_conda

the Conda packages manager under Settings is not listing the environments available. Though I'm able to see the environments by executing the command in the terminal

conda info --envs

Not sure what I'm missing. Any help would be great ?

Dedicated branch for the Conda Store integration

Description

Conda Store is a tool to easily manage, scalably build and serve environments.

There is a current effort from Quansight to integrate Conda Store into Gator. We've presented the project to @fcollonval and defined together the best way to do this.

A first PR has been open. The destination of this PR is the master.
But we thought : it would be easier for the mamba-org team that we make pull requests on a specific branch. This would ease the project by allowing more frequent reviews and discussions, and merges.
Ultimately, once the project is done, the merge of this branch to the master will also be easier.

In this context : can you please create a branch named conda-store-integration (or any name you'll judge suitable) ? Once it's done, we'll modify our PR to make it point to it.

Thanks a lot for your help and cooperation. Best regards.

Actions

  • Create a specific branch named conda-store-integration
  • Modify PR #155 to make it point to it

Update to JupyterLab 3.0

Now that JupyterLab 3.0.0rc4 is available on both PyPI and conda forge, we can start updating both the labextension and the navigator to the 3.0 packages.

We should also look into packaging the labextension and the navigator as part of jupyter_conda.

Automatic Kernelspec Creation

Description

Is it possible to have the jupyterlab extension automatically create a kernelspec for the user when a new environment is created? I'm working on deploying this on an HPC cluster, and I'd like to keep it as user-friendly as possible.

I can add global kernelspecs for everyone at the python install location, and I can also add kernelspecs in my ~/.local/share/jupyter folder that just show up for one user. For a local conda environment, I usually add a kernelspec like this within a conda environment: ipykernel install --user --name testName --display-name="Display Name Within JupyterLab". Is it possible to have jupyter_conda run something like that when a environment is created? Currently I see the created environments with conda info --envs, but no kernel within JupyterLab.

Proposed Steps

  1. Add a new conda environment from the GUI.
  2. Automatically add a new user-side kernelspec.

Context

JupyterLab instances are launched from JupyterHub, all of which are in a centralized location. General users don't have write access to the install location. So when a user creates a conda environment, it rightfully goes into their home directory:

$ conda info --envs
# conda environments:
#
Test                     /home/<user>/.conda/envs/Test
base                  *  /modules/apps/miniconda/4.8.3
  • Python package version: 3.4.0
  • Extension version: 2.2.0
  • General information: Running Python 3.8.5, custom built.

Using via JupyterHub?

Description

Not exactly a bug (I presume) but it's giving me headaches nevertheless.
We launch notebooks via JupyterHub and that means the api endpoints are at a different location.

So gator tries to access things like the kernel list via /api/kernels. The hub redirects this to /hub/api/kernels, but it should use the user routes (/user/<username>/api/kernels). Is there any way to get this working?

We used the jupyterlab_conda extension so far, which "worked" for us, but that isn't compatible anymore at all. Seems this one comes by default now and it would be awesome to get it to work as it does exactly what we are looking for.

  • Python package version: 4.1.0
  • Extension version:
JupyterLab v3.0.5
/opt/conda/share/jupyter/labextensions
        @jupyter-widgets/jupyterlab-manager v3.0.0 enabled OK (python, jupyterlab_widgets)

Other labextensions (built into JupyterLab)
   app dir: /opt/conda/share/jupyter/lab
        @mamba-org/gator-lab v2.1.0 enabled  

Handle environment from prefix

Currently environment are handled through name. It would be better to handle them through prefix to support complex installation.

Error while listing Conda environments

Description

I installed jupyterlab_conda and jupyterlab_toastify on a fresh miniconda environment. When starting the JupyterLab server the extensions says it is loading all packages in the background. So far so good. When i open the Conda Packages Manager via the Settings menu a new field "An error occurred while listing Conda environments." shows up and nothing happens.

Reproduce

Open the Conda Packages Manager via the Settings dropdown menu in JupyterLab.

Expected behavior

List all environments and the installed packages.

Context

  • Python package version:

jupyter_conda 3.3.1 pyh9f0ad1d_0 conda-forge

  • Extension version:

JupyterLab v2.1.3
Known labextensions:
app dir: /opt/conda/share/jupyter/lab
@lckr/jupyterlab_variableinspector v0.5.0 enabled OK
jupyterlab_conda v2.1.2 enabled OK
jupyterlab_toastify v4.0.0 enabled OK

Command Line Output
[I 09:20:26.947 LabApp] 302 GET / (172.17.0.1) 2.92ms
[jupyter_conda] No available packages list in cache.
[E 09:20:30.369 LabApp] [jupyter_conda] Error for task {'type': 'AttributeError', 'error': "'EnvManager' object has no attribute 'list_available'", 'message': 'AttributeError("\'EnvManager\' object has no attribute \'list_available\'")', 'traceback': ['  File "/opt/conda/lib/python3.7/site-packages/jupyter_conda/handlers.py", line 99, in execute_task\n    result = await f(*args)\n', '  File "/opt/conda/lib/python3.7/site-packages/jupyter_conda/handlers.py", line 376, in update_available\n    answer = await env_manager.list_available()\n']}.
[I 09:20:32.144 LabApp] Build is up to date
[E 09:20:32.148 LabApp] {
      "Host": "localhost:8888",
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:76.0) Gecko/20100101 Firefox/76.0",
      "Accept": "*/*",
      "Accept-Language": "de,en-US;q=0.7,en;q=0.3",
      "Accept-Encoding": "gzip, deflate",
      "Referer": "http://localhost:8888/lab?",
      "Authorization": "token 371d84163c690ff5e36733aba7156d2fe1a292b1df8a65c0",
      "X-Xsrftoken": "2|50d45677|d0c6fb53aeb59c0aa1faa2c7c1a33674|1590739972",
      "Content-Type": "application/json",
      "Connection": "keep-alive",
      "Cookie": "_xsrf=2|50d45677|d0c6fb53aeb59c0aa1faa2c7c1a33674|1590739972; username-localhost-8888=\"2|1:0|10:1590744030|23:username-localhost-8888|44:NDczMTA3OTk5YjA1NDZiNmFkMTMyZDZkMzgxNDAzNjE=|6cd51c01980db7be6def68589ba326cd90e2b880880919eaa4d0f6305c989853\"",
      "Pragma": "no-cache",
      "Cache-Control": "no-cache"
    }
[E 09:20:32.149 LabApp] 500 GET /conda/tasks/1?1590744031373 (172.17.0.1) 4.29ms referer=http://localhost:8888/lab?
[E 09:21:40.253 LabApp] Uncaught exception GET /conda/environments?whitelist=0&1590744100227 (172.17.0.1)
    HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/conda/environments?whitelist=0&1590744100227', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.7/site-packages/tornado/web.py", line 1703, in _execute
        result = await result
      File "/opt/conda/lib/python3.7/site-packages/jupyter_conda/handlers.py", line 174, in get
        list_envs = await self.env_manager.list_envs(whitelist == 1)
    TypeError: list_envs() takes 1 positional argument but 2 were given
[W 09:21:40.274 LabApp] Unhandled error

conda tab in classical notebook pod spawned from Jupyterhub has unwanted warnings.

Description

In the classical notebook server(pod) spawned from Jupyterhub, when I click the Conda tab, it will pop up a warning window telling me an error An error occurred while retrieving package information.
Screen Shot 2020-06-29 at 10 34 55 PM

Reproduce

I was following Zero to JupyterHub with Kubernetes(https://zero-to-jupyterhub.readthedocs.io/en/latest/index.html) and using KIND(https://kind.sigs.k8s.io/docs/user/quick-start/) to set up the k8s cluster.

And the singleuser image I use is base-notebook from docker-stacks(https://github.com/jupyter/docker-stacks/blob/master/base-notebook/Dockerfile) with modification only to install jupyter_conda package.

After everything is setup. Just go to classical notebook and click Conda tab, you would see the window pop up.

Expected behavior

No warning shows up.

Context

  • Helm chart version:
    Jupyterhub: 0.8.2
  • Python package version:
    jupyter_conda: latest

What I see

b0231e00-ba21-11ea-9887-7869b1ac8067

in which test.hub.kind.test 127.0.0.1 in /etc/hosts

the request URL somehow end up with /hub/conda/task/... instead of /user/username/conda/task/... with which using wget will not give 404 code.

Test semver 7.x

Building JLab with the current version implies:

 WARNING in semver
      Multiple versions of semver found:
        6.3.0 ./~/semver from ./~/jupyterlab_conda/lib/validator.js
        7.3.2 ./~/vega-embed/~/semver from ./~/vega-embed/~/semver/index.js

This could be solved.

Need to try 6.x || 7.x => Should not be a problem according to the changelog

gator not displayed in jupyterlab after updating or re-installing

Description

When updating to the latest version of gator, I noticed that the gator tab will not be displayed in the jupyterlab unless I manually delete the file in ~/.jupyter/lab/workspaces/.
Starting gator from the command line works fine.

This can be reproduced by uninstalling/installing gator.

Reproduce

  1. Uninstall mamba_gator (mamba uninstall mamba_gator)
  2. Install mamba_gator (mamba install gator)
  3. Open jupyterlab
  4. Go to Settings menu, click on Conda Package Manager
  5. Nothing happen: no error and the gator tab is not displayed!
  6. Close jupyterlab
  7. Delete the file in ~/.jupyter/lab/workspaces/
  8. Open jupyterlab
  9. Go to Settings menu, click on Conda Package Manager
  10. The gator tab is displayed!

Expected behavior

The gator tab should open when clicking on Conda Package Manager from the Settings menu without having to delete the file in ~/.jupyter/lab/workspaces/ .

Context

  • Python package version: 5.1.0
  • Extension version: 3.0.0
  • General information:
Command Line Output
Paste the output from your command line running `jupyter lab` here, use `--debug` if possible.
Browser Output
Paste the output from your browser Javascript console here.

Classic notebook extension with 2.0.0

Description

It looks like the classic notebook extension is not installed automatically with the latest 2.0.0 release.

Reproduce

  1. mamba create -n test -c conda-forge python -y
  2. pip install mamba-gator
  3. jupyter nbextension list
$ jupyter nbextension list
Known nbextensions:
  config dir: /home/jtp/miniforge3/envs/test/etc/jupyter/nbconfig
    notebook section
      mamba_gator/static/main  enabled
      - Validating: problems found:
        - require?  X mamba_gator/static/main
    tree section
      mamba_gator/static/tree  enabled
      - Validating: problems found:
        - require?  X mamba_gator/static/tree

pick non-base environment as kernel for notebooks

I have a (maybe?) related issue. I just set up a new JupyterLab 3 environment and installed gator to manage conda envs (I previously used nb_conda_kernels but it doesn't look like it works anymore?).

The gator tab shows all my existing kernels but I can't start a notebook in anything but the base environment. Is there some
additional step I need to take to make them discoverable?

edit: I guess my issue is different and just required ipython kernel install --user --name=<name>. Somehow in the past that wasn't necessary for me to see new kernels.

Originally posted by @jamestwebber in #147 (comment)

cannot see full paths to conda envs

Description

For conda envs installed in custom locations, the path can be too long to fully display in the launcher (see the attached pic). In my case, many of the conda env "tiles" in the launcher look exactly the same. It would be nice if the user could change the format to just a list of paths instead of the default "tile" view.

Screen Shot 2020-05-23 at 9 33 20 PM

Context

  • Operating System and version:
  • Browser and version: Chrome 81.0.4044.138
  • JupyterLab version: 2.1.3-py_0
  • jupyterlab_conda version: up-to-date

Mamba not recognized on windows

Description

The command used for detecting the version of mamba is not working on Windows:

from subprocess import Popen, PIPE

Popen(["mamba", "--version"], stdout=PIPE, stderr=PIPE).communicate()
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-6-8405acab7e6e> in <module>()
      1 from subprocess import Popen, PIPE
      2 
----> 3 Popen(["conda", "--version"], stdout=PIPE, stderr=PIPE).communicate()

C:\Users\freud\Miniconda3\envs\gator\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
    798                                 c2pread, c2pwrite,
    799                                 errread, errwrite,
--> 800                                 restore_signals, start_new_session)
    801         except:
    802             # Cleanup if the child failed starting.

C:\Users\freud\Miniconda3\envs\gator\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)
   1205                                          env,
   1206                                          os.fspath(cwd) if cwd is not None else None,
-> 1207                                          startupinfo)
   1208             finally:
   1209                 # Child is launched. Close the parent's copy of those pipe

FileNotFoundError: [WinError 2] Le fichier spécifié est introuvable

no_conda_kernels is not finding conda

Description

Installing from conda-forge for JupyterLab 2.2.5 (served from JupyterHub)

Install completes but on starting up Conda Package Manager from JLab
gives 2 boxes;

"An error occured while listing Conda environments"
" ... I know you want to give up, but wait a bit longer..." Waiting doesn't help :-)

In the system log there is this,

Aug 22 00:08:48 i7ml jupyterhub[24643]: [Errno 2] No such file or directory: 'conda'
Aug 22 00:08:48 i7ml jupyterhub[24643]: [E 2020-08-22 00:08:48.089 SingleUserNotebookApp manager:91] [nb_conda_kernels] couldn't call conda:

Looks like it is not finding conda? Maybe need a full path to the system conda (in /opt/conda/bin) ??

Any ideas for a fix/workaround would be appreciated. Thanks

Error when switching to conda tab, referencing /tmp/jupyter_conda_packages.json

Description

When trying to create a docker image for JupyterHub containing jupyter_conda, I'm getting the following error in the terminal:

Fail to load available packages from cache [Errno 2] No such file or directory: '/tmp/jupyter_conda_packages.json

After a few moments, this error does seem to resolve as /tmp/jupyter_conda_packages.json is created by the notebook server.

I have two questions regarding this behaviour:

  • Why is the file only showing up later? Is there a way to get this file loaded before? (Currently it is giving an error in the UI as well, together with the terminal error, which is worrying our users needlessly.)
  • The jupyter_conda_packages.json file is being writting to /tmp/jupyter_conda_packages.json, and is being owned by the user who first spawned his/her notebook. Will this work in a multi-user setup?

Reproduce

I'm creating a docker image using:

ARG PYTHON_VERSION=3.6
FROM godatadriven/miniconda:${PYTHON_VERSION}

ARG BUILD_DATE
ARG JH_VERSION

LABEL org.label-schema.name="JupyterHub $JH_VERSION" \
      org.label-schema.build-date=$BUILD_DATE \
      org.label-schema.version=$JH_VERSION

RUN set -x && \
    if [ -n "$JH_VERSION" ]; then\
        conda install -y nb_conda_kernels jupyter_conda jupyterhub==$JH_VERSION jupyter_client 'tornado<6' -c conda-forge;\
    else\
        conda install -y nb_conda_kernels jupyter_conda jupyterhub jupyter_client 'tornado<6' -c conda-forge;\
    fi && \
    python -m nb_conda_kernels.install --enable --prefix=/opt/miniconda3 && \
    conda clean -tipsy && \
    apt-get update && \
    apt-get install -y git build-essential nano vim less procps apt-transport-https ca-certificates --no-install-recommends && \
    apt-get clean

RUN useradd -ms /bin/bash -p "$(openssl passwd -1 joyvan)" joyvan

EXPOSE 8000
ENTRYPOINT ["jupyterhub"]

I then start the server using:

docker run --rm -p 8000:8000 jupyterhub:latest --ip 0.0.0.0

and login using user joyvan with password joyvan.

Expected behavior

  • For the first question, I would expect not to get this error + get packages loaded in the left bottom window of the conda tab on the first view.
  • For the second, I would expect the json file to be written in a user-specific location rather than a global location that is the same for all users.

Context

  • Python package version: 3.1.1
  • Extension version: n/a
  • General information:

Conda info:

     active environment : None
       user config file : /home/joyvan/.condarc
 populated config files : 
          conda version : 4.7.12
    conda-build version : not installed
         python version : 3.6.9.final.0
       virtual packages : 
       base environment : /opt/miniconda3  (read only)
           channel URLs : https://repo.anaconda.com/pkgs/main/linux-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/linux-64
                          https://repo.anaconda.com/pkgs/r/noarch
          package cache : /opt/miniconda3/pkgs
                          /home/joyvan/.conda/pkgs
       envs directories : /home/joyvan/.conda/envs
                          /opt/miniconda3/envs
               platform : linux-64
             user-agent : conda/4.7.12 requests/2.22.0 CPython/3.6.9 Linux/4.9.184-linuxkit debian/9 glibc/2.24
                UID:GID : 1000:1000
             netrc file : None
           offline mode : False

"Internal server error" while leaving Conda tab open

Description

Using the classical notebook, I have the jupyter_conda extension tab open in one browser tab while working on a notebook in another browser tab.

When returning to the jupyter_conda extension tab after a while, I sometimes see the following error:

An error occurred while retrieving package information.
Internal Server Error

Once the error is acknowledged, everything seems to be working fine for a while, until the error appears again.

Reproduce

  1. Open Jupyter Notebook and open a notebook in another browser tab
  2. On the main Jupyter Notebook, go to the Conda extension tab and leave it open
  3. Work in the open notebook for a while
  4. See the error

Expected behavior

No errors should appear.

Context

  • Python package version:
    jupyter_conda 3.2.0

  • General information:

active environment : myenv
    active env location : C:\Users\my_user\anaconda3\envs\myenv
            shell level : 2
       user config file : C:\Users\my_user\.condarc
 populated config files : C:\Users\my_user\.condarc
          conda version : 4.8.3
    conda-build version : 3.18.11
         python version : 3.7.6.final.0
       virtual packages :
       base environment : C:\Users\my_user\anaconda3  (writable)
           channel URLs : https://conda.anaconda.org/conda-forge/win-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://conda.anaconda.org/danabb/win-64
                          https://conda.anaconda.org/danabb/noarch
                          https://repo.anaconda.com/pkgs/main/win-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/win-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/msys2/win-64
                          https://repo.anaconda.com/pkgs/msys2/noarch
          package cache : C:\Users\my_user\anaconda3\pkgs
                          C:\Users\my_user\.conda\pkgs
                          C:\Users\my_user\AppData\Local\conda\conda\pkgs
       envs directories : C:\Users\my_user\anaconda3\envs
                          C:\Users\my_user\.conda\envs
                          C:\Users\my_user\AppData\Local\conda\conda\envs
               platform : win-64
             user-agent : conda/4.8.3 requests/2.22.0 CPython/3.7.6 Windows/10 Windows/10.0.18362
          administrator : False
             netrc file : None
           offline mode : False
Command Line Output
[jupyter_conda] Error for task {'type': 'JSONDecodeError', 'error': 'Expecting value: line 1 column 1 (char 0)', 'message': "JSONDecodeError('Expecting value: line 1 column 1 (char 0)')", 'traceback': ['  File "C:\\Users\\my_user\\anaconda3\\envs\\myenv\\lib\\site-packages\\jupyter_conda\\handlers.py", line 99, in execute_task\n    result = await f(*args)\n', '  File "C:\\Users\\my_user\\anaconda3\\envs\\myenv\\lib\\site-packages\\jupyter_conda\\handlers.py", line 378, in update_available\n    answer = await env_manager.list_available()\n', '  File "C:\\Users\\my_user\\anaconda3\\envs\\myenv\\lib\\site-packages\\jupyter_conda\\envmanager.py", line 536, in list_available\n    pkg_info.update(json.loads(channeldata)["packages"])\n', '  File "C:\\Users\\my_user\\anaconda3\\envs\\myenv\\lib\\json\\__init__.py", line 348, in loads\n    return _default_decoder.decode(s)\n', '  File "C:\\Users\\my_user\\anaconda3\\envs\\myenv\\lib\\json\\decoder.py", line 337, in decode\n    obj, end = self.raw_decode(s, idx=_w(s, 0).end())\n', '  File "C:\\Users\\my_user\\anaconda3\\envs\\myenv\\lib\\json\\decoder.py", line 355, in raw_decode\n    raise JSONDecodeError("Expecting value", s, err.value) from None\n']}.
[E 14:49:33.808 NotebookApp] {
      "Host": "localhost:8889",
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
      "Accept": "application/json, text/javascript, */*; q=0.01",
      "Accept-Language": "en,en-US;q=0.5",
      "Accept-Encoding": "gzip, deflate",
      "Content-Type": "application/json",
      "X-Xsrftoken": "2|45dd5af5|7da671fcd92d13cf1ab8bdd307663521|1588788619",
      "X-Requested-With": "XMLHttpRequest",
      "Connection": "keep-alive",
      "Referer": "http://localhost:8889/tree/%40Testing/myenv%26sos",
      "Cookie": "username-localhost-8888=\"2|1:0|10:1589290483|23:username-localhost-8888|44:ODQ4OGZjNzRiOGE2NDVjMzgyNDI3NTNiNmEzNTk4Yjg=|512f4bb20310ee5918647e5237331a01c6944f967ac323ad655966774364d137\"; username-localhost-8889=\"2|1:0|10:1589373875|23:username-localhost-8889|44:MmExZDFjNzdlMTEyNDEyMzg5OGVlNzViNWE0MjU1YmM=|d79c33879223d7d013ef917580a96196f56ea565900c6aa5287c61c898360055\"; username-localhost-8890=\"2|1:0|10:1589312521|23:username-localhost-8890|44:MDE5NjQ1NWMwZTgzNGY3OGE0ZTE5ZTY5YjM4Yjk0NzQ=|339aff3272598c4137b2fa9cdd8ab45ba208520b05a1dbdea4a6ffddbfb16f08\"; _xsrf=2|45dd5af5|7da671fcd92d13cf1ab8bdd307663521|1588788619; username-localhost-8891=\"2|1:0|10:1589372152|23:username-localhost-8891|44:MmYyMjhkZjQ0NWVhNDZjZTg2NmZjNzY1NTIyN2ZhZGY=|64da50ba72388c7d4c053768d6be093caf94a71448ea122ea5a3d3efb2954734\"; username-localhost-8892=\"2|1:0|10:1589312815|23:username-localhost-8892|44:MGUzMTAzMDc3ZjEzNDBhZTg0YmYwOTg0NjVhZTA4YTI=|e91747578f41edd9a44d626aea5479aab08091c1bc81127a4578884887c4333c\""
    }
[E 14:49:33.813 NotebookApp] 500 GET /conda/tasks/1?_=1589373876385 (127.0.0.1) 2.00ms referer=http://localhost:8889/tree/%40Testing/myenv%26sos
Browser Output
Paste the output from your browser Javascript console here.

Move some of the dev dependencies to the top level

Description

Some of the devDependencies seem to be defined in each of the packages:

"@typescript-eslint/eslint-plugin": "^2.21.0",
"@typescript-eslint/parser": "^2.21.0",
"eslint": "^6.8.0",
"eslint-config-prettier": "^6.10.0",
"eslint-plugin-prettier": "^3.1.2",
"eslint-plugin-react": "^7.18.3",
"husky": "^0.14.0",

We could probably move them to the top-level package.json:

"devDependencies": {

As well as some of the prettier files.

Add support for mamba

Description

Add support for mamba

Thanks @SylvainCorlay for pinging me. One question, my idea is to add a configurable server option to choose the package manager. Will this fit your use case?

UX/UI proposals for Gator

Hi there! I’m part of a team looking to integrate conda-store into gator (thanks to @fcollonval for meeting with us). I would like to start this issue as a place to propose some UX and UI changes to make gator more user-friendly no matter what environment management is being used.

I also have very little experience with designing for environments, so I know there’s a lot of things I don’t know in this area. Feel free to let me know if you think something I’ve proposed doesn’t actually make sense or if I’m missing an important feature.

Some goals

  • Show the primary information in the sidebar while still expanding to the main document area if desired
  • Organize info in a familiar way (since environments are unfamiliar to many users)
  • Organize info in a way that can be applied to different environment management systems with different features

If you have thoughts on other goals to keep in mind, let me know.

Proposal

This is still pretty rough (and mostly without color), but I’d rather share ideas and get feedback early!

So far, I’ve been working on the main organization of content and not the more specific interactions (like no mockups for install new package yet). Once we are okay with an idea for organizing info, I plan to jump into those features.

One of the problems I heard about early on was trying to convey a lot of info in not a lot of space while being clear the relationship between the layers (like which packages are in which environment). In many ways, this is similar to what the file browser does. So this proposal extends that behavior.

It also makes it so that much of the information fits in the sidebar and users don’t have to use the main document area unless they want to.

The basic list of environments in the sidebar:
3-26

An environment with expanded information in the main document area:
3-29

And context menus show the same basic interactions as in the top of the sidebar. (Though I'm not sure what else should go here.)
3-35

This is also the same structure for packages within an environment.
3-32

Try it out

I think the interactions can be most easily seen in this simple prototype. ✨

Problems

  • In the file browser, a folder icon tells users that they can click into in while file format icons designate a kind of end-of-the-line. We may need some equivalent visual to help inform users how to interact with the different types.
  • I worry about having users be able to go all the way back to the environment manager in the kind-of file path, but I’ve gotten feedback it’s important to know. I’m not sure if there’s a better way to communicate it since I’d suspect most users are concerned with listing environments and packages only.

Thanks in advance for the feedback!

would like to install on system level

What i would like to do is to install jupyter_conda at the system level to allow users to set up their own local conda environments.
however when I try to install conda with pip i get

[joe@mcdull extensions]$ pip3 install nb-conda-kernels
ERROR: Could not find a version that satisfies the requirement nb-conda-kernels (from versions: none)
ERROR: No matching distribution found for nb-conda-kernels

Any pointers for allowing me to do something like this?

TypeError: Unexpected token < in JSON at position 0

Hi,

I have jut installed the latest version of jupyter_conda with JupyterLab 1.1.0.
Executing jupyter labextension list in an anaconda prompt confirms the required extensions are installed and enabled:
jupyterlab_conda v1.0.0 enabled ok
jupyterlab_toastify v2.3.0 enabled ok
Executing conda list in the anaoconda prompt confirms I have the conda package installed:
jupyter_conda 2.4.1 py37_1000 conda-forge
however I get the following error when running jupyter lab:
"TypeError: Unexpected token < in JSON at position 0"
And the environments I have are not listed.
If I switch to Jupyter Notebook by changing /lab to /tree in the URL, I can confirm that the conda extension works correctly in Jupyter Notebook (The environments are listed correctly).

Any idea waht is happening?

Thanks,

Kernel spec metadata discard existing fields

Description

It looks like the original kernel spec metadata for a kernel is not kept when using the "conda version" of the kernel.

Reproduce

  1. Go to mybinder.org: https://mybinder.org/v2/gh/fcollonval/jupyter_conda/master?urlpath=lab
  2. Install xeus-python from the conda packages manager
  3. Do a GET /api/kernelspecs to retrieve the kernel specs (for example in the browser by entering: https://path/to/the/mybinder.org/api/kernelspecs)

Starting from version 0.8.0, xeus-python includes the debugger key in the kernel specs metadata.

However this key is not present in the metadata for xpython [conda env:notebook] *:

image

Expected behavior

The metadata for xpython [conda env:notebook] * should include debugger: true along conda_env_name and conda_env_path.

Context

Binder link on Firefox 77.

Renaming / branding

Do you think it would be interesting to rename the project into "conda / mamba navigator" now that it has a standalone mode? (we also thought of of "gator" :).

Happy to discuss this in person! cc @jtpio @fcollonval

Feature: Cache Location

This is a feature request.

I'm running gator on a clustered installation served using JupyterHub. After looking over the code I've learned how gator caches packages - using the /tmp folder on the system and writing to everyone. Traditionally, this folder is not clustered - it is specific to the server. It would be great to have an option to set the "cache" location, in my case that would be a shared network location. That way when a cache gets updated it gets updated across the cluster.

I could work on a PR for this - although I'm not sure where you'd want the configuration option for this to live?

UX improvements

List things to be done to improve UX:

  • Make columns sortable or filtering on channels for example
  • Improve channels text using longStart...End instead of trying to be smart by taking a part of the URL
  • Show to which version the package is gonna be updated
  • Show which channels will be used for update if it changes (needs a idea how to show)
  • Manage channels?
  • Add blue border on search box only when focused (see jlab extensions manager in >=0.33)
  • Add loading animation a la extension manager (similar to VS Code blue line animation) when loading things

only base environment being detected/displayed

I have two environments, base and rtc, and in fact this version of JupyterLab was started from the rtc one. From a terminal in Lab I can see conda env list correctly showing both, but gator only shows base:

image

Any thoughts on what could be happening?

Context

  • Python package version:
# Name                    Version                   Build  Channel
mamba_gator               5.1.1              pyhd8ed1ab_0    conda-forge
  • Extension version:
(rtc) blanca[~]> jupyter labextension list
JupyterLab v3.1.0a10
/Users/fperez/local/conda/envs/rtc/copip/share/jupyter/labextensions
        spreadsheet-editor v0.5.1 enabled OK (python, jupyterlab-spreadsheet-editor)

/Users/fperez/local/conda/envs/rtc/share/jupyter/labextensions
        jupyterlab-link-share v0.2.0 enabled OK (python, jupyterlab-link-share)
        @mamba-org/gator-lab v3.0.1 enabled OK (python, mamba_gator)
        @retrolab/lab-extension v0.2.1 enabled OK
conda info output
(rtc) blanca[~]> conda info

     active environment : rtc
    active env location : /Users/fperez/local/conda/envs/rtc
            shell level : 2
       user config file : /Users/fperez/.condarc
 populated config files : /Users/fperez/.condarc
          conda version : 4.10.1
    conda-build version : not installed
         python version : 3.9.4.final.0
       virtual packages : __osx=11.4=0
                          __unix=0=0
                          __archspec=1=x86_64
       base environment : /Users/fperez/local/conda  (writable)
      conda av data dir : /Users/fperez/local/conda/etc/conda
  conda av metadata url : https://repo.anaconda.com/pkgs/main
           channel URLs : https://conda.anaconda.org/conda-forge/osx-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://repo.anaconda.com/pkgs/main/osx-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/osx-64
                          https://repo.anaconda.com/pkgs/r/noarch
          package cache : /Users/fperez/local/conda/pkgs
                          /Users/fperez/.conda/pkgs
       envs directories : /Users/fperez/local/conda/envs
                          /Users/fperez/.conda/envs
               platform : osx-64
             user-agent : conda/4.10.1 requests/2.25.1 CPython/3.9.4 Darwin/20.5.0 OSX/11.4
                UID:GID : 33212:20665
             netrc file : None
           offline mode : False

Launcher icon position

At the moment, the launcher is added in the notebook section.

Should it be in another category instead?

Can we define new categories for the launcher in JupyterLab?

Support for Jupyterlab 2.0.1

HI i was wondering if there will be support for the current version of jupyterlab. It looks like the plugin is pinned to jupyterlab 1.0.0

First time initialization never ends loading

Description

It is already warned that the first time the extension is used, the extension lasts a long time initializing. But in my case, I let it running for 2h and it didn't finish yet. I suspect something is going wrong after noticing some errors in the console.

Reproduce

I am using the "jupyter/minimal-notebook" Docker image.

  1. Create the Docker container:
docker run -d \
    -p 80:8888 \
    -e JUPYTER_ENABLE_LAB=yes \
    --name jupyter \
    jupyter/minimal-notebook \
    start.sh jupyter lab --LabApp.token='' --debug
  1. Install jupyter_conda python package:
docker exec jupyter conda install -c conda-forge jupyter_conda
  1. Install JupyterLab extension:
docker exec jupyter jupyter labextension install jupyterlab_conda
  1. Open JupyterLab in browser. It should located in http://localhost/. After some seconds, loading pop-ups appear:

screenshot

Expected behavior

Context

  • Python package version:
# packages in environment at /opt/conda:
#
# Name                    Version                   Build  Channel
jupyter_conda             3.4.1              pyh9f0ad1d_0    conda-forge
  • Extension version:
JupyterLab v2.2.5
Known labextensions:
   app dir: /opt/conda/share/jupyter/lab
        @jupyter-widgets/jupyterlab-manager v2.0.0  enabled  OK
        @jupyterlab/commenting-extension v0.3.0 disabled OK
        @jupyterlab/debugger v0.3.2 disabled OK
        @jupyterlab/geojson-extension v2.0.1 disabled OK
        @jupyterlab/git v0.21.1 disabled OK
        @jupyterlab/hdf5 v0.4.1 disabled OK
        @jupyterlab/latex v2.0.1 disabled OK
        @jupyterlab/shortcutui v0.5.0-beta.2 disabled OK
        @krassowski/jupyterlab-lsp v2.0.7 disabled OK
        bqplot v0.5.17 disabled OK
        dask-labextension v3.0.0 disabled OK
        jupyterlab-chart-editor v4.10.0 disabled OK
        jupyterlab-dash v0.3.0 disabled OK
        jupyterlab-drawio v0.7.0 disabled OK
        jupyterlab-spreadsheet v0.3.2 disabled OK
        jupyterlab_conda v2.2.4  enabled  OK
        nbdime-jupyterlab v2.0.0 disabled OK
  • General information:
     active environment : None
       user config file : /home/jovyan/.condarc
 populated config files : /opt/conda/.condarc
          conda version : 4.8.3
    conda-build version : not installed
         python version : 3.8.5.final.0
       virtual packages : __glibc=2.31
       base environment : /opt/conda  (writable)
           channel URLs : https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://repo.anaconda.com/pkgs/main/linux-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/linux-64
                          https://repo.anaconda.com/pkgs/r/noarch
          package cache : /opt/conda/pkgs
                          /home/jovyan/.conda/pkgs
       envs directories : /opt/conda/envs
                          /home/jovyan/.conda/envs
               platform : linux-64
             user-agent : conda/4.8.3 requests/2.24.0 CPython/3.8.5 Linux/4.19.76-linuxkit ubuntu/20.04 glibc/2.31
                UID:GID : 1000:100
             netrc file : None
           offline mode : False
Command Line Output
...
[D 08:22:22.379 LabApp] Found kernel python3 in /opt/conda/share/jupyter/kernels
[D 08:22:22.380 LabApp] [nb_conda_kernels] refreshing conda info
[D 08:22:22.712 LabApp] 200 GET /api/kernelspecs?1600849342376 (192.168.48.2) 333.13ms
[D 08:22:22.718 LabApp] 202 GET /conda/tasks/1?1600849342580 (192.168.48.2) 2.69ms
[D 08:22:23.725 LabApp] 202 GET /conda/tasks/1?1600849343721 (192.168.48.2) 0.65ms
[D 08:22:24.732 LabApp] 202 GET /conda/tasks/1?1600849344729 (192.168.48.2) 0.78ms
[D 08:22:25.620 LabApp] 200 GET /api/sessions?1600849345616 (192.168.48.2) 1.12ms
[D 08:22:25.623 LabApp] 200 GET /api/kernels?1600849345619 (192.168.48.2) 1.29ms
[D 08:22:25.739 LabApp] 202 GET /conda/tasks/1?1600849345736 (192.168.48.2) 0.61ms
[D 08:22:26.745 LabApp] 202 GET /conda/tasks/1?1600849346742 (192.168.48.2) 0.54ms
[D 08:22:27.752 LabApp] 202 GET /conda/tasks/1?1600849347749 (192.168.48.2) 0.57ms
[D 08:22:28.071 LabApp] 200 GET /api/contents/work?content=1&1600849347951 (192.168.48.2) 116.48ms
[D 08:22:28.760 LabApp] 202 GET /conda/tasks/1?1600849348756 (192.168.48.2) 0.60ms
[D 08:22:29.769 LabApp] 202 GET /conda/tasks/1?1600849349766 (192.168.48.2) 0.56ms
[D 08:22:30.536 LabApp] 200 GET /api/terminals?1600849350532 (192.168.48.2) 0.62ms
[D 08:22:30.776 LabApp] 202 GET /conda/tasks/1?1600849350773 (192.168.48.2) 0.73ms
[D 08:22:31.783 LabApp] 202 GET /conda/tasks/1?1600849351780 (192.168.48.2) 0.87ms
[D 08:22:32.790 LabApp] 202 GET /conda/tasks/1?1600849352785 (192.168.48.2) 1.26m
...
Browser Output
Failed to load resource: the server responded with a status of 404 (Not Found) -- /conda/packages?1600813681244:1
Fail to read JSON response for request "Object" SyntaxError: Unexpected token < in JSON at position 0 -- services.js:623 

Create a simple server for the navigator

Description

Currently the navigator is built on top of a JupyterLab server. This is not a good idea as it brings endpoints for kernels, content management, terminal,... . We should build on top of a simple server.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.