restart kernel
解決したいこと
jupyterlabのipynbファイル内で、自作のtest.pyを
import test
として使っています。開発段階なのでしょっちゅうtest.pyは書き換えられます。
変更を反映するのにいちいちrestart kernelして実行するのは面倒なのですが何かいい方法はないでしょうか?
よろしくお願いいたします
jupyterlabのipynbファイル内で、自作のtest.pyを
import test
として使っています。開発段階なのでしょっちゅうtest.pyは書き換えられます。
変更を反映するのにいちいちrestart kernelして実行するのは面倒なのですが何かいい方法はないでしょうか?
よろしくお願いいたします
import importlib
importlib.reload(test)
頻繁に変わることが前提なら、test.pyの内容をnotebook内で扱ったほうが良いかと
@morisita
Questioner
ありがとうございます。うまく行きました。実際には
'''
import something_long_name as sln
'''
としたかったのですが、これは
'''
sln=importlib.reload(something_long_name)
'''
で対応できるようです
既に解決されているかと思いますが、誰もIPythonの拡張モジュールautoreload
について触れられてないので補足しておきます。
%load_ext autoreload
%autoreload 2
コマンドした後
import test
import
が動的になり、常に最新を反映(リロード)します。
公式ドキュメントに情報や、やり方のサンプルがありますから確認してみて下さい。またこの手の情報は検索すると日本語の情報も出てくるかと思われます。
@morisita
Questioner
ありがとうございます。これも期待通りに働きます
restart kernelと絡めて検索したので引っかからなかったのかもしれません。リロードで検索するといくつか引っかかるので、jupyterlabのmenuの項目をreload kernelとかにしてもらえれば良いのかもしれません。
del test
してimport test
してみたらどうでしょうか?
import test
del test
import test
そうしてもモジュールはリロードされないので変更は反映されません。
そうでした。すみません。
@morisita
Questioner
nak435様。いつもご回答ありがとうございます
'''
import test
test.hello()
del test
test.hello()
'''
とすると(test.hello()はprint('hello')とするだけの関数です)、二回目のtest.hello()では
'''
NameError: name 'test' is not defined
'''
となり、思った通りの動きをしているのですが、このつぎに
'''
import test
'''
としても、古いtest.pyが読み込まれて、restart kernelしないと更新されたtest.pyは読み込まれないようです。