morisita
@morisita

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

restart kernel

Q&A

Closed

解決したいこと

jupyterlabのipynbファイル内で、自作のtest.pyを

import test

として使っています。開発段階なのでしょっちゅうtest.pyは書き換えられます。
変更を反映するのにいちいちrestart kernelして実行するのは面倒なのですが何かいい方法はないでしょうか?
よろしくお願いいたします

0

3Answer

import importlib

importlib.reload(test)

頻繁に変わることが前提なら、test.pyの内容をnotebook内で扱ったほうが良いかと

3Like

Comments

  1. @morisita

    Questioner

    ありがとうございます。うまく行きました。実際には
    '''
    import something_long_name as sln
    '''
    としたかったのですが、これは
    '''
    sln=importlib.reload(something_long_name)
    '''
    で対応できるようです

既に解決されているかと思いますが、誰もIPythonの拡張モジュールautoreloadについて触れられてないので補足しておきます。

%load_ext autoreload
%autoreload 2

コマンドした後

import test

importが動的になり、常に最新を反映(リロード)します。

公式ドキュメントに情報や、やり方のサンプルがありますから確認してみて下さい。またこの手の情報は検索すると日本語の情報も出てくるかと思われます。

2Like

Comments

  1. @morisita

    Questioner

    ありがとうございます。これも期待通りに働きます
    restart kernelと絡めて検索したので引っかからなかったのかもしれません。リロードで検索するといくつか引っかかるので、jupyterlabのmenuの項目をreload kernelとかにしてもらえれば良いのかもしれません。

del testしてimport testしてみたらどうでしょうか?

import test
del test
import test
1Like

Comments

  1. そうしてもモジュールはリロードされないので変更は反映されません。

  2. そうでした。すみません。

  3. @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は読み込まれないようです。

Your answer might help someone💌