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

3
优秀的ipython笔记本有一个方便的--script命令行标志,它会自动将笔记本的副本保存为.py脚本文件(删除任何标题和markdown单元格)。在打开笔记本后,有没有一种方法可以从笔记本内部打开此功能?显然,这个选项对%config魔法是不可访问的。
有没有办法有一个单元格来完成这个转换?有没有命令行工具可以用来完成转换,只需在笔记本中运行一个shell命令吗?(似乎nbconvert不能输出到.py)。
我之所以问这个问题,是因为我有一个笔记本的git存储库,当用户更改笔记本本身时,我需要确保.py文件保持最新,因为.py文件用于根据笔记本的内容创建c++代码。但我不能依靠用户设置--script标志,因为他们总是会忘记。(我也包括在这些用户中)。
2个回答

3
更好的是(至少对于我的目的来说):ipython 尊重本地副本的 ipython_notebook_config.py 文件。因此,我只需添加。
c = get_config()
c.NotebookManager.save_script = True

我希望能在我的笔记本目录中创建这样一个文件。显然,IPython首先读取~/.ipython/profile_default/ipython_notebook_config.py,然后再读取该文件的本地副本。因此,可以放心使用而不必担心破坏用户设置。

从文档上看我并没有明白这一点,但是我刚刚尝试了一下,它确实有效。


0

哦,我的错误。 nbconvert 可以 处理转换为脚本的操作。所以我可以这样做:

!ipython nbconvert --to python MyNB.ipynb

当然,这行代码将会保存到脚本中,这意味着每次执行时脚本都会尝试重新保存笔记本。这有点循环,我可以想象它可能会对一些更离奇的黑客攻击造成问题。相反,我们可以通过以下方式包装来确保它只在ipython中运行:
try :
    if(__IPYTHON__) :
        !ipython nbconvert --to python MyNB.ipynb
except NameError :
    pass

请注意,转换过程将自动将语法转换为纯Python可接受的内容。但是,这显然不适用于--script转换。因此,最安全的方法是:
try :
    if(__IPYTHON__) :
        get_ipython().system(u'ipython nbconvert --to python MyNB.ipynb')
except NameError :
    pass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接