沧歌


起风了,唯有努力生存


Jupyter Notebook版本控制

Jupyter Notebook是一个非常方便做机器学习和数据分析的工具,但由于它将代码和输出混在了一起,非常不利于用Git进行版本控制。

那么,可以将notebook转成python脚本再控制啊。

完成 .ipynb 文件转换成 .py 文件的工作可以通过 post-save 的钩子自动进行。

只需要按照如下所示,修改 ipython 的配置文件即可:

~/.jupyter/ipython_notebook_config.py

添加以下代码:

### If you want to auto-save .html and .py versions of your notebook:
# modified from: https://github.com/ipython/ipython/issues/8009
# Solution2: https://jupyter-notebook.readthedocs.io/en/stable/extending/savehooks.html
import os
from subprocess import check_call
import re

def clear_prompt(dir_path, nb_fname, log_func):
    """remove the number in '# In[ ]:'"""
    name, ext = os.path.splitext(nb_fname)
    pattern = re.compile(r'^# In\[\d+\]:')

    for n_ext in ['.py', '.txt']:
        script_name = os.path.join(dir_path, name+n_ext)
        if os.path.exists(script_name):
            new_lines = []
            with open(script_name, 'rt') as f:
                lines = f.readlines()
            for line in lines:
                new_line = re.sub(pattern, '# In[ ]:', line)
                new_lines.append(new_line)
            with open(script_name, 'wt') as f:
                f.writelines(new_lines)
            log_func('Remove number in "# In[ ]:"! File Name: %s' % script_name)
            break

def post_save(model, os_path, contents_manager):
    """post-save hook for converting notebooks to .py scripts"""
    if model['type'] != 'notebook':
        return # only do this for notebooks
    d, fname = os.path.split(os_path)
    check_call(['jupyter', 'nbconvert', '--to', 'script', fname], cwd=d)  # '--no-prompt',
    log = contents_manager.log
    # log.info('Filename:%s'%fname)
    clear_prompt(d, fname, log.info)
    # check_call(['ipython', 'nbconvert', '--to', 'html', fname], cwd=d)

c.FileContentsManager.post_save_hook = post_save

建议将notebook放在一个单独的目录下面,这样生成的py文件就可以和其他代码很好的区分开了。

最近的文章

博客小站翻修小记

实话说,用Github Pages写博客虽然显得高端,但实际上并没有那么方便。我中途也想换用CSDN之类的网站,但试了试感觉上面的氛围还是不符合自己的性子。这期间发现喵神的博客居然更新了,功能丰富大变样,自己也想把自己的博客捡起来。先尝试了喵神用的chirpy模版,结果发现虽然功能很多,但默认的效果不如我现在的配置好看。所以这里先试着将喵神博客的一些新特性加入到自己的网站中,在此过程中,记录...…

Jekyll Github继续阅读
更早的文章

妙用SSH端口转发

SSH 端口转发简介参考这篇文章:实战 SSH 端口转发  我们常用 SSH 连接远程服务器,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。本地转发本地转发的命令格式是:ssh -L <local port...…

network ssh继续阅读