This hack comes from https://github.com/jupyter/notebook/blob/master/docs/source/extending/savehooks.rst.
jupyter_notebook_config.py
Here is the code:
# Based off of https://github.com/jupyter/notebook/blob/master/docs/source/extending/savehooks.rst
import io
import os
from notebook.utils import to_api_path
= None
_script_exporter = None
_html_exporter
def script_post_save(model, os_path, contents_manager, **kwargs):
"""convert notebooks to Python script after save with nbconvert
replaces `ipython notebook --script`
"""
from nbconvert.exporters.script import ScriptExporter
from nbconvert.exporters.html import HTMLExporter
if model['type'] != 'notebook':
return
global _script_exporter
if _script_exporter is None:
= ScriptExporter(parent=contents_manager)
_script_exporter = contents_manager.log
log
global _html_exporter
if _html_exporter is None:
= HTMLExporter(parent=contents_manager)
_html_exporter = contents_manager.log
log
# save .py file
= os.path.splitext(os_path)
base, ext = _script_exporter.from_filename(os_path)
script, resources # si le sous rep eports_py existe, on ecrit dedans, sinon on ecrit à la racine
=''
sous_rep=os.path.dirname(base)
repertoireif os.path.exists(repertoire+'/exports_py'):
='/exports_py'
sous_rep= os.path.basename(base)
basename = repertoire+ sous_rep+'/'+basename+resources.get('output_extension', '.txt')
script_fname "base: {}, basename: {}, sous_rep: {}, repertoire: {}".format(base, basename, sous_rep, repertoire))
log.info("script_fname: {}".format(script_fname))
log.info(#script_fname = base + resources.get('output_extension', '.txt')
"Saving script /%s", to_api_path(script_fname, contents_manager.root_dir))
log.info(with io.open(script_fname, 'w', encoding='utf-8') as f:
f.write(script)
"""
# save html
base, ext = os.path.splitext(os_path)
script, resources = _html_exporter.from_filename(os_path)
script_fname = base + resources.get('output_extension', '.txt')
log.info("Saving html /%s", to_api_path(script_fname, contents_manager.root_dir))
with io.open(script_fname, 'w', encoding='utf-8') as f:
f.write(script)
"""
= script_post_save c.FileContentsManager.post_save_hook
In this version, if a subfolder exports_py
exists, .py version will be exported in it. Oherwise it will be exported in the notebook folder.
Maybe in a later version it would be good to export only of this subfolder exists. (for example I don’t need these py files when creating such a blog entry, even if my .gitignore
won’t publish .py files)
And to remove the creation of Untitled.txt
files when notebooks are just being created (and not yet named).
deployment
Just save/merge this jupyter_notebook_config.py
file (download) to your jupyter home directory.
According to Config file and command line options in jupyter documentation, it is located at ~/.jupyter
And in windows it is at C:\Users\<yourID>\.jupyter
This will be valid for all your conda environments.
test
~/.jupyter$ cp ~/git/guillaume/blog/files/jupyter_notebook_config.py .
Restart Jupyter notebook server and click save on any notebook: