2013-09-28 53 views
3

優秀的ipython筆記本具有方便的--script命令行標誌,可自動將筆記本的副本保存爲.py腳本文件(刪除任何標頭和降格單元)。打開筆記本電腦後,有沒有辦法從筆記本內部開啓此功能?顯然,這個選項不可用於%config魔法。以編程方式將ipython筆記本保存爲腳本

有沒有辦法讓一個細胞做這種轉換?有沒有我可以用來進行轉換的命令行工具,並且在從筆記本運行的shell命令中使用該命令? (似乎nbconvert不輸出到.py

的原因,我想問的是,我有筆記本電腦的git倉庫,我需要確保.py文件保持最新狀態,當用戶改變筆記本電腦本身因爲.py文件用於從筆記本的內容創建C++代碼。但我不能依靠用戶設置--script國旗,因爲他們會永遠忘記。 (並且我把自己包括在那組用戶中。)

回答

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