kynan / nbstripout

strip output from Jupyter and IPython notebooks
Other
1.19k stars 95 forks source link

Set default values for name and display_name in kernelspec #141

Closed sp-fm closed 3 years ago

sp-fm commented 3 years ago

Jupyter Version

$ jupyter --version

jupyter core     : 4.6.3
jupyter-notebook : 6.1.4
qtconsole        : not installed
ipython          : 7.19.0
ipykernel        : 5.3.4
jupyter client   : 6.1.7
jupyter lab      : not installed
nbconvert        : 6.0.7
ipywidgets       : not installed
nbformat         : 5.0.8
traitlets        : 5.0.5

NOTE: The latest version of jupyter changed metadata.kernel_spec to metadata.kernelspec.

Problem

I stripped the kernelspec metadata using the following command:

git config --global filter.nbstripout.extrakeys '
  metadata.kernelspec.name
  metadata.kernelspec.display_name'

On doing so I encountered two problems:

  1. Git cannot render the notebook properly
  2. When I make changes to a code and then do git checkout to undo those changes it removes the kernelspec name and display_name metadata. This is as expected. But when I try to rerun the notebook it throws the following errors: a. Kernel not found b. Notebook validation failed: 'name' is a required property: c. Notebook validation failed: 'display_name' is a required property:

Change Request

Is it possible to set the name and display_name to a default value such as:

{
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  }
 }
}
vlin02 commented 3 years ago

Had the same issue. A hacky fix for now is you can go into _util.py manually, insert:

nb.metadata['kernelspec']['name'] = 'python3'
nb.metadata['kernelspec']['display_name'] = 'Python 3'

inside strip_output()

ESKYoung commented 3 years ago

When I make changes to a code and then do git checkout to undo those changes it removes the kernelspec name and display_name metadata. This is as expected. But when I try to rerun the notebook it throws the following errors: a. Kernel not found b. Notebook validation failed: 'name' is a required property: c. Notebook validation failed: 'display_name' is a required property:

Hope this helps, but I've found that deleting the entire kernelspec (i.e. the extra key is: metadata.kernelspec) doesn't throw the notebook errors, at least when set up as a pre-commit hook. Booting the notebook then defaults to Python 3 kernel.

kynan commented 3 years ago

I can confirm the behavior @sp-fm is seeing and the suggestion from @ESKYoung works for me. Seems GitHub renders notebooks without kernelspec metadata fine too.

I've added a note to the README. Let me know if that's satisfactory for you.

ESKYoung commented 3 years ago

Looks good to me @kynan, thanks!

kynan commented 3 years ago

Thanks. I'll close this. Please reopen if the proposed solution doesn't work for someone.