1. 程式人生 > 程式設計 >解決Jupyter notebook中.py與.ipynb檔案的import問題

解決Jupyter notebook中.py與.ipynb檔案的import問題

在jupyter notebook中,因為其解析檔案的方式是基於json的,所以其預設儲存的檔案格式不是.py而是.ipynb。而.ipynb檔案並不能簡單的import進.py或者.ipynb檔案中,這就為開發帶來了極大不便。因為在jupyter notebook中,一定要是在預設的.ipynb下才能有一系列的特性支援,比如自動補全,控制檯等待,而.py檔案只能通過文字編輯器修改,非常非常不便。

因為.ipynb可以import .py的module,所以其中一個解決方法是將已經寫好的.ipynb格式的module轉換成.py檔案。在寫好的.ipynb檔案的最後新建一個cell,寫入程式碼如下:

try:  
  !jupyter nbconvert --to python file_name.ipynb
  # python即轉化為.py,script即轉化為.html
  # file_name.ipynb即當前module的檔名
except:
  pass

然後在當前目錄下會生成一個同名的.py檔案,這個module可以在其他.ipynb中被import。但這樣轉化出的.py檔案中有時候會保留上述程式碼。如果要完全避免的話,可以專門另寫一個轉換檔案,集中存放所有檔案的轉換語句。

補充知識:jupyter notebook的project管理——.ipynb中呼叫.py檔案

做課題和資料探勘競賽用python比較多,比較常用的是在伺服器終端輸入jupyter notebook --ip 0.0.0.0,開啟jupyter notebook的一個後臺,並在本地windows電腦瀏覽器進入該服務端寫python程式碼。

將.ipynb和.py結合,可以使得jupyter notebook的工程檔案目錄更有條理,一些函式可以定義在.py檔案中,需要呼叫這些檔案時,就匯入到.ipybn中執行。

那在jupyter notebook中呼叫同,怎麼在.ipynb.py中呼叫.py檔案呢?

舉個栗子:

在同一個目錄下,有call_hello.ipynb和hello.py兩個檔案:

解決Jupyter notebook中.py與.ipynb檔案的import問題

hello.py中定義了hello函式如下:

def hello():
print('say hello');

在call_hello.ipynb中呼叫hello()函式:

from hello import *
hello()

輸出: say hello

但是修改.py檔案中的程式碼後,必須在ipynb中reload模組,才會生效。

如果hello.py中的程式碼修改成:

def hello():
print('say hello,bye');

在call_hello.ipynb中再次呼叫hello()函式,依然輸出:say hello

重新匯入hello模組:

from imp import reload
reload(hello)
hello()

這時候會輸出:say hello,bye

bingo!

以上這篇解決Jupyter notebook中.py與.ipynb檔案的import問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。