优秀的ipython笔记本有一个方便的--script
命令行标志,可以自动将笔记本的副本保存为.py
脚本文件(删除任何标题和降价单元格)。有没有办法在笔记本电脑打开后从笔记本电脑内部切换此功能?显然,%config
魔法无法访问此选项。
有没有办法让一个单元格进行这种转换?有没有我可以用来进行转换的命令行工具,只是在从笔记本运行的shell命令中有这个? (似乎nbconvert没有输出到.py
。)
我问的原因是我有一个笔记本电脑的git存储库,当用户自己更换笔记本时我需要确保.py
文件保持最新,因为.py
文件是用于从笔记本的内容创建c ++代码。但我不能依赖用户设置--script
标志,因为他们总是会忘记。 (我将自己包括在那一组用户中。)
答案 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