3

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

有没有办法让细胞进行这种转换?是否有任何命令行工具可以用来进行转换,并且只需在笔记本运行的 shell 命令中使用它?(似乎 nbconvert 不输出到.py。)

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

4

2 回答 2

3

更好的是(至少出于我的目的):ipython 尊重ipython_notebook_config.py文件的本地副本。所以我可以添加

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

到我的笔记本目录中的这样一个文件。显然,ipython 首先读取~/.ipython/profile_default/ipython_notebook_config.py,然后读取该文件的本地副本。所以使用起来很安全,不用担心会破坏用户设置。

从文档中我根本不清楚,但我只是尝试过它并且它有效。

于 2013-09-28T15:44:11.883 回答
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
于 2013-09-28T14:25:10.840 回答