Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't select kernel in jupyter notebook in a way that is visible to autograder #706

Closed
champoll opened this issue Aug 14, 2023 · 13 comments · Fixed by #708
Closed

Can't select kernel in jupyter notebook in a way that is visible to autograder #706

champoll opened this issue Aug 14, 2023 · 13 comments · Fixed by #708
Labels
bug Something isn't working
Milestone

Comments

@champoll
Copy link

Describe the bug
I don't know how to tell the autograder which kernel to use.

To Reproduce
My setup requires me to install otter-grader and the other packages I use into a conda environment, e.g. "aug14". This requires me to configure my .ipynb files by setting the kernel that corresponds to this environment. Since the same kernel needs to be used while running otter assign, autograding, and solving the assignment as a student, this needs to be done once centrally per assignment. I used to be able to do this in the Kernel dropdown menu of the Jupyter notebook graphical interface, by selecting "Change Kernel" and then selecting the name of the kernel, e.g. "Python [conda env:aug 14]", all of this before running otter assign.

This no longer works. Instead, an error is thrown "jupyter_client.kernelspec.NoSuchKernel: No such kernel named conda-env-aug14-py" when I try to run otter assign. A temporary workaround was to run ipython kernel install --user --name=aug14. This however just delays the error: Otter assign then compiles without problems but the autograder throws the same NoSuchKernel error.

Expected behavior
otter assign should transmit correct information about which kernel to use to the autograder even when the kernel is set using the ipython kernel install command.

Versions
Python version: 3.10.12
Otter-Grader version: 5.1.1

Selected Jupyter core packages...
IPython : 8.14.0
ipykernel : 6.25.1
ipywidgets : 8.1.0
jupyter_client : 8.3.0
jupyter_core : 5.3.1
jupyter_server : 2.7.0
jupyterlab : 4.0.5
nbclient : 0.8.0
nbconvert : 7.7.3
nbformat : 5.9.2
notebook : 7.0.2
qtconsole : 5.4.3
traitlets : 5.9.0

Additional context

Error while running otter assign if one doesn't use the ipython kernel install workaround:

(aug14) instructor@jupyter-lc126:~$ otter assign assignment01.ipynb dist
Traceback (most recent call last):
  File "/opt/conda/envs/aug14/bin/otter", line 10, in <module>
    sys.exit(cli())
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/cli.py", line 32, in wrapper
    return f(*args, **kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/cli.py", line 64, in assign_cli
    return assign(*args, **kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/assign/__init__.py", line 157, in main
    run_tests(assignment, debug=debug)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/assign/utils.py", line 201, in run_tests
    results = grade_submission(
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/api.py", line 54, in grade_submission
    results = run_grader(
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/run/__init__.py", line 59, in main
    run_autograder_main(ag_dir, logo=logo, debug=debug)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/run/run_autograder/__init__.py", line 65, in main
    scores = runner.run()
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/run/run_autograder/runners/python_runner.py", line 125, in run
    scores = grade_notebook(
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/execute/__init__.py", line 94, in grade_notebook
    executed_nb, _ = ep.preprocess(nb)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/nbconvert/preprocessors/execute.py", line 94, in preprocess
    with self.setup_kernel():
  File "/opt/conda/envs/aug14/lib/python3.10/contextlib.py", line 135, in __enter__
    return next(self.gen)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/nbclient/client.py", line 596, in setup_kernel
    self.start_new_kernel(**kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_core/utils/__init__.py", line 166, in wrapped
    return loop.run_until_complete(inner)
  File "/opt/conda/envs/aug14/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
    return future.result()
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/nbclient/client.py", line 546, in async_start_new_kernel
    await ensure_async(self.km.start_kernel(extra_arguments=self.extra_arguments, **kwargs))
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_core/utils/__init__.py", line 182, in ensure_async
    result = await obj
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/manager.py", line 93, in wrapper
    raise e
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/manager.py", line 85, in wrapper
    out = await method(self, *args, **kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/manager.py", line 397, in _async_start_kernel
    kernel_cmd, kw = await self._async_pre_start_kernel(**kw)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/manager.py", line 359, in _async_pre_start_kernel
    self.kernel_spec,
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/manager.py", line 182, in kernel_spec
    self._kernel_spec = self.kernel_spec_manager.get_kernel_spec(self.kernel_name)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/kernelspec.py", line 287, in get_kernel_spec
    raise NoSuchKernel(kernel_name)
jupyter_client.kernelspec.NoSuchKernel: No such kernel named otter-env
^CException ignored in: <module 'threading' from '/opt/conda/envs/aug14/lib/python3.10/threading.py'>
Traceback (most recent call last):
  File "/opt/conda/envs/aug14/lib/python3.10/threading.py", line 1567, in _shutdown
    lock.acquire()
KeyboardInterrupt:
(aug14) instructor@jupyter-lc126:~$ ^C
(aug14) instructor@jupyter-lc126:~$ otter assign assignment01.ipynb dist
Traceback (most recent call last):
  File "/opt/conda/envs/aug14/bin/otter", line 10, in <module>
    sys.exit(cli())
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/cli.py", line 32, in wrapper
    return f(*args, **kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/cli.py", line 64, in assign_cli
    return assign(*args, **kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/assign/__init__.py", line 157, in main
    run_tests(assignment, debug=debug)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/assign/utils.py", line 201, in run_tests
    results = grade_submission(
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/api.py", line 54, in grade_submission
    results = run_grader(
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/run/__init__.py", line 59, in main
    run_autograder_main(ag_dir, logo=logo, debug=debug)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/run/run_autograder/__init__.py", line 65, in main
    scores = runner.run()
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/run/run_autograder/runners/python_runner.py", line 125, in run
    scores = grade_notebook(
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/otter/execute/__init__.py", line 94, in grade_notebook
    executed_nb, _ = ep.preprocess(nb)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/nbconvert/preprocessors/execute.py", line 94, in preprocess
    with self.setup_kernel():
  File "/opt/conda/envs/aug14/lib/python3.10/contextlib.py", line 135, in __enter__
    return next(self.gen)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/nbclient/client.py", line 596, in setup_kernel
    self.start_new_kernel(**kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_core/utils/__init__.py", line 166, in wrapped
    return loop.run_until_complete(inner)
  File "/opt/conda/envs/aug14/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
    return future.result()
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/nbclient/client.py", line 546, in async_start_new_kernel
    await ensure_async(self.km.start_kernel(extra_arguments=self.extra_arguments, **kwargs))
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_core/utils/__init__.py", line 182, in ensure_async
    result = await obj
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/manager.py", line 93, in wrapper
    raise e
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/manager.py", line 85, in wrapper
    out = await method(self, *args, **kwargs)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/manager.py", line 397, in _async_start_kernel
    kernel_cmd, kw = await self._async_pre_start_kernel(**kw)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/manager.py", line 359, in _async_pre_start_kernel
    self.kernel_spec,
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/manager.py", line 182, in kernel_spec
    self._kernel_spec = self.kernel_spec_manager.get_kernel_spec(self.kernel_name)
  File "/opt/conda/envs/aug14/lib/python3.10/site-packages/jupyter_client/kernelspec.py", line 287, in get_kernel_spec
    raise NoSuchKernel(kernel_name)
jupyter_client.kernelspec.NoSuchKernel: No such kernel named conda-env-aug14-py
^CException ignored in: <module 'threading' from '/opt/conda/envs/aug14/lib/python3.10/threading.py'>
Traceback (most recent call last):
  File "/opt/conda/envs/aug14/lib/python3.10/threading.py", line 1567, in _shutdown
    lock.acquire()
KeyboardInterrupt:
(aug14) instructor@jupyter-lc126:~$ 

If one uses the ipython kernel install workaround, otter assign compiles without error but the autograder produces this error:

 _________        __          __               
 /  _____  \    __|  |__    __|  |__               
|  /     \  |  |__    __|  |__    __|   _______    _  _____
| |       | |     |  |        |  |     |  ___  |  | |/ ____|
| |       | |     |  |        |  |     | |___| |  |   /    
| |       | |     |  |        |  |     | ______|  |  |
|  \_____/  |     |  |_       |  |_    | |_____   |  |
 \_________/       \ __|       \ __|    \______|  |__|
                                                v5.1.1


Traceback (most recent call last):
  File "/autograder/source/run_otter.py", line 6, in <module>
    run_autograder("/autograder")
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/otter/run/run_autograder/__init__.py", line 65, in main
    scores = runner.run()
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/otter/run/run_autograder/runners/python_runner.py", line 125, in run
    scores = grade_notebook(
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/otter/execute/__init__.py", line 94, in grade_notebook
    executed_nb, _ = ep.preprocess(nb)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbconvert/preprocessors/execute.py", line 94, in preprocess
    with self.setup_kernel():
  File "/root/mambaforge/envs/otter-env/lib/python3.9/contextlib.py", line 119, in __enter__
    return next(self.gen)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbclient/client.py", line 561, in setup_kernel
    self.start_new_kernel(**kwargs)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbclient/util.py", line 84, in wrapped
    return just_run(coro(*args, **kwargs))
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbclient/util.py", line 62, in just_run
    return loop.run_until_complete(coro)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete
    return future.result()
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbclient/client.py", line 516, in async_start_new_kernel
    await ensure_async(self.km.start_kernel(extra_arguments=self.extra_arguments, **kwargs))
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbclient/util.py", line 96, in ensure_async
    result = await obj
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/manager.py", line 93, in wrapper
    raise e
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/manager.py", line 85, in wrapper
    out = await method(self, *args, **kwargs)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/manager.py", line 397, in _async_start_kernel
    kernel_cmd, kw = await self._async_pre_start_kernel(**kw)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/manager.py", line 359, in _async_pre_start_kernel
    self.kernel_spec,
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/manager.py", line 182, in kernel_spec
    self._kernel_spec = self.kernel_spec_manager.get_kernel_spec(self.kernel_name)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/kernelspec.py", line 287, in get_kernel_spec
    raise NoSuchKernel(kernel_name)
jupyter_client.kernelspec.NoSuchKernel: No such kernel named conda-env-aug14-py
@chrispyles
Copy link
Member

@champoll you send the output of jupyter kernelspec list from whichever environment you're running otter assign in? I'm guessing that the kernel you're using in jupyter isn't available to the jupyter installation that's inside your conda environment.

Also: do students need to run a kernel with the same name as the one you're using to write assignments (the conda-env-aug14-py one) or do they use the default python3 kernel?

@champoll
Copy link
Author

instructor@jupyter-lc126:~$ conda activate aug14
(aug14) instructor@jupyter-lc126:~$ jupyter kernelspec list
Available kernels:
  python3                                 /opt/conda/envs/aug14/share/jupyter/kernels/python3
  chrisfork                               /home/instructor/.local/share/jupyter/kernels/chrisfork
  chrisfork_python3.10.12                 /home/instructor/.local/share/jupyter/kernels/chrisfork_python3.10.12
  conda-env-aug14-py                      /home/instructor/.local/share/jupyter/kernels/conda-env-aug14-py
  conda-env-chrisfork-py                  /home/instructor/.local/share/jupyter/kernels/conda-env-chrisfork-py
  conda-env-chrisfork_python3.10.12-py    /home/instructor/.local/share/jupyter/kernels/conda-env-chrisfork_python3.10.12-py
(aug14) instructor@jupyter-lc126:~$

I don't have the rights to install otter-grader (and its dependencies) into the default python3 kernel, so I use conda to prepare a kernel. So far I've always provided students with the same kernel I use to write assignments, by selecting that kernel in Jupyter Notebook using ipykernel and the dropdown menu.

@champoll
Copy link
Author

Just to add to this, if it's helpful, I can ask whether packages could be installed on my behalf into my server's default environment-- let me know

@chrispyles
Copy link
Member

@champoll can you trying installing my fork and let me know if this is fixed? pip uninstall -y otter-grader && pip install git+https://github.com/chrispyles/otter-grader.git@master

@chrispyles
Copy link
Member

@champoll forgot to mention: after you run otter assign with my fork, you'll need to edit the environment.yml file in the autograder zip file to replace otter-grader==5.1.1 with git+https://github.com/chrispyles/otter-grader.git@master.

@champoll
Copy link
Author

Unfortunately it didn't work (even after editing environment.yml). The autograder timed out on gradescope and returned the error message below.

In case this can't be fixed quickly, could you recommend a workaround? I can't test or deploy any assignments as long as it persists.

Also, would it be possible to increase the version number or use another way to make sure that I can see if the autograder is running on the correct version?


  _________        __          __               
 /  _____  \    __|  |__    __|  |__               
|  /     \  |  |__    __|  |__    __|   _______    _  _____
| |       | |     |  |        |  |     |  ___  |  | |/ ____|
| |       | |     |  |        |  |     | |___| |  |   /    
| |       | |     |  |        |  |     | ______|  |  |
|  \_____/  |     |  |_       |  |_    | |_____   |  |
 \_________/       \ __|       \ __|    \______|  |__|
                                                v5.1.1


Traceback (most recent call last):
  File "/autograder/source/run_otter.py", line 6, in <module>
    run_autograder("/autograder")
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/otter/run/run_autograder/__init__.py", line 68, in main
    scores = runner.run()
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/otter/run/run_autograder/runners/python_runner.py", line 125, in run
    scores = grade_notebook(
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/otter/execute/__init__.py", line 96, in grade_notebook
    executed_nb, _ = ep.preprocess(nb)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbconvert/preprocessors/execute.py", line 94, in preprocess
    with self.setup_kernel():
  File "/root/mambaforge/envs/otter-env/lib/python3.9/contextlib.py", line 119, in __enter__
    return next(self.gen)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbclient/client.py", line 561, in setup_kernel
    self.start_new_kernel(**kwargs)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbclient/util.py", line 84, in wrapped
    return just_run(coro(*args, **kwargs))
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbclient/util.py", line 62, in just_run
    return loop.run_until_complete(coro)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete
    return future.result()
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbclient/client.py", line 516, in async_start_new_kernel
    await ensure_async(self.km.start_kernel(extra_arguments=self.extra_arguments, **kwargs))
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/nbclient/util.py", line 96, in ensure_async
    result = await obj
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/manager.py", line 93, in wrapper
    raise e
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/manager.py", line 85, in wrapper
    out = await method(self, *args, **kwargs)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/manager.py", line 397, in _async_start_kernel
    kernel_cmd, kw = await self._async_pre_start_kernel(**kw)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/manager.py", line 359, in _async_pre_start_kernel
    self.kernel_spec,
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/manager.py", line 182, in kernel_spec
    self._kernel_spec = self.kernel_spec_manager.get_kernel_spec(self.kernel_name)
  File "/root/mambaforge/envs/otter-env/lib/python3.9/site-packages/jupyter_client/kernelspec.py", line 287, in get_kernel_spec
    raise NoSuchKernel(kernel_name)
jupyter_client.kernelspec.NoSuchKernel: No such kernel named conda-env-chrisfork-py
'''

@chrispyles
Copy link
Member

Can you send me the autograder zip and a submission notebook so I can debug locally? feel free to send in slack if you don't want it posted publicly.

For a workaround, try adding the line conda run -n otter-env ipython kernel install --user --name=aug14 (basically the same command you used to create the new kernel prepended with conda run -n otter-env) to the bottom of the setup.sh file in the autograder zip. Not 100% sure if this will work but let me know.

@joelostblom
Copy link
Contributor

I'm running into this as well on otter 5.2.2 and 5.1.1. Trying jupyter kernelspec list does not list the kernel, but launching jupyterlab from the environment does. After trying conda run -n otter-env ipython kernel install --user --name=my_env the environment is now listed, but I still run into the same error. The only fix I have fun so far is to change the kernel name to python3.

@chrispyles
Copy link
Member

@joelostblom are you seeing this error when running otter assign or on Gradesocpe/with otter grade/otter run?

@joelostblom
Copy link
Contributor

Hey @chrispyles It is when I am running otter assign locally.

@chrispyles
Copy link
Member

@joelostblom can you send the output of jupyter kernelspec list, otter --version, and steps/a notebook to reproduce? I'm unable to get any errors by using a custom kernel with otter assign in v5.2.2.

@joelostblom
Copy link
Contributor

joelostblom commented Oct 2, 2023

It's odd, I'm using the sample env from https://otter-grader.readthedocs.io/en/latest/workflow/otter_generate/container_image.html#environment-yml with the sample notebook from https://github.com/ucbds-infra/otter-grader/tree/master/examples/env-validation. It was working a couple of days ago, so I'm thinking I might have modified something unintentionally. I have recreated the env several times, tried updating and rebooting the system. Maybe I will try a conda re-installation next...

The output from jupyter kernelspec list is :

[ListKernelSpecs] WARNING | Config option `kernel_spec_manager_class` not recognized by `ListKernelSpecs`.

Available kernels:
  python3    /home/joel/miniconda3/envs/otter-env/share/jupyter/kernels/python3
  ir         /home/joel/.local/share/jupyter/kernels/ir

But again, if I open jupyterlab in the same environment, then it does see all the kernels.

otter version shows:

  _________        __          __               
 /  _____  \    __|  |__    __|  |__               
|  /     \  |  |__    __|  |__    __|   _______    _  _____
| |       | |     |  |        |  |     |  ___  |  | |/ ____|
| |       | |     |  |        |  |     | |___| |  |   /    
| |       | |     |  |        |  |     | ______|  |  |
|  \_____/  |     |  |_       |  |_    | |_____   |  |
 \_________/       \ __|       \ __|    \______|  |__|
                                                v5.2.2

Python version: 3.9.18
Otter-Grader version: 5.2.2

@joelostblom
Copy link
Contributor

I followed the steps here and it works again! 🎉 anaconda/nb_conda_kernels#112 (comment) Somehow it seems like either my nb_conda_kernels installation is not working as it should or something else is off that requires this manual addition of the kernels via the newer discovery mechanism

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
3 participants