以编程方式将ipython notebook保存为脚本

时间:2013-09-28 14:03:49

标签: ipython-notebook

优秀的ipython笔记本有一个方便的--script命令行标志,可以自动将笔记本的副本保存为.py脚本文件(删除任何标题和降价单元格)。有没有办法在笔记本电脑打开后从笔记本电脑内部切换此功能?显然,%config魔法无法访问此选项。

有没有办法让一个单元格进行这种转换?有没有我可以用来进行转换的命令行工具,只是在从笔记本运行的shell命令中有这个? (似乎nbconvert没有输出到.py。)

我问的原因是我有一个笔记本电脑的git存储库,当用户自己更换笔记本时我需要确保.py文件保持最新,因为.py文件是用于从笔记本的内容创建c ++代码。但我不能依赖用户设置--script标志,因为他们总是会忘记。 (我将自己包括在那一组用户中。)

2 个答案:

答案 0 :(得分:3)

更好(至少对我而言):ipython尊重ipython_notebook_config.py文件的本地副本。所以我可以添加

c = get_config()
c.NotebookManager.save_script = True

到我的笔记本目录中的这样一个文件。显然,ipython首先读取~/.ipython/profile_default/ipython_notebook_config.py,然后读取该文件的本地副本。因此,使用它是安全的,无需担心拆除用户设置。

我从文档中看不出这一点,但我只是尝试了它并且它有效。

答案 1 :(得分:0)

喔。我的错。 nbconvert 可以处理对脚本的转换。所以我可以这样做:

!ipython nbconvert --to python MyNB.ipynb

当然,这一行将保存到脚本中,这意味着脚本每次执行时都会尝试将笔记本重新保存到自身。这有点循环,我可以想象它可能会导致我的一些更古怪的黑客问题。相反,我们可以通过如下包装来确保它仅从ipython运行:

try :
    if(__IPYTHON__) :
        !ipython nbconvert --to python MyNB.ipynb
except NameError :
    pass

请注意,转换过程会自动将!语法转换为plain python可接受的语法。 --script转换显然不是这种情况。所以这样做的安全方法是

try :
    if(__IPYTHON__) :
        get_ipython().system(u'ipython nbconvert --to python MyNB.ipynb')
except NameError :
    pass