在Jupyter
中使用py文件
中的代碼時,可使用包sys
引入路徑後,再進行調用。但是這樣存在一個問題,每次修改py文件中的代碼時,需要重啓才能正確使用修改過後的py文件
代碼,這樣是非常沒有效率的。
那麼在Jupyter cell
中可以通過如下幾行命令以及包importlib
,在每次py
文件有修改時,自動引入更改後的該模塊:
%load_ext autoreload
%autoreload 1
%aimport heihei
比如在這裏,我有一個python
文件(模塊)叫做heihei
。下面我來展示如何在jupyer
中使用上述幾行命令,使得在對heihei
進行修改後,不用restart
而直接使用更改後的heihei
代碼。
代碼
首先,我有兩個文件夾,ipynb
以及src
,我要執行的.ipynb
文件存放在文件夾ipynb
中,heihei.py
位於src
文件夾中,其中有一個方法叫做print_info()
,具體代碼如下:
def print_info():
print("Hello, Hello, This is ober.")
print("Oh my god.")
print("fungu.")
print("真的改了麼?")
一開始,需要使用包sys
引入src/heihei/
:
import sys
import importlib
sys.path.append('../src/')
同時可以看到,引入了一個包importlib
。
%load_ext autoreload
%autoreload 1
%aimport heihei # 引入heihei模塊使用該魔法命令
importlib.reload(heihei)
接下來可以先嚐試直接運行heihei.print_info()
,在對print_info()
方法中的最後一行信息註釋後,再運行。結果如下圖所示:
額外
importlib.reload(heihei)
,reload方法只能重載模塊,如果不想使用heihei.print_info()
而是想使用print_info()
運行,那麼需要在每次修改完對應的部分後,從該模塊導入待執行的方法,如from heihei import print_info
,之後運行print_info
便能看到改變了。