Jupyter使用py文件代碼

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()方法中的最後一行信息註釋後,再運行。結果如下圖所示:

image

額外

importlib.reload(heihei),reload方法只能重載模塊,如果不想使用heihei.print_info()而是想使用print_info()運行,那麼需要在每次修改完對應的部分後,從該模塊導入待執行的方法,如from heihei import print_info,之後運行print_info便能看到改變了。

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章