当サイトには広告・プロモーションが含まれています。

pythonでfrom importをreloadする

この記事で分かること
  • pythonで「from importした場合のモジュールをreload」したい人に向けた記事です。
目次

前書き

自作のライブラリやモジュールを作成するときに、更新を反映したい場合がよくあります。importの仕方として、

import X 

とした場合には、importlibのreloadが下記のように使用できます。

from importlib import reload
reload(X)

これに対して、

from X import Y

でimportした場合には、上記のreloadでは更新が反映されません。
毎回再起動するのは面倒なので、この場合もreloadできないの?という話です。

コード

パターン1:from importをreload

from importlib import reload
import sys
from mymodule import myfunction

reload(sys.modules["mymodule"])
from mymodule import myfunction

一応ですが、このmain.pyと同じフォルダに下記のmymodule.pyがある状況です。

def myfunction():
    pass #何か処理

パターン2:init処理でfrom importされる場合をreload

もう少し複雑な状況で

  • main.py
  • mypackage/
    • __init__.py
    • mymodule.py
from .mymodule import myfunction
def myfunction():
    print("test")

のように、mypackageをimportすると、__init__.pyでの初期化処理でmymoduleのmyfunction関数が取り込まれる場合でも対応することができます。

下記のようにモジュールを先にreloadしておいて、その後でmypackageをreloadすればOKです!

from importlib import reload
import sys
import mypackage

reload(sys.modules["mypackage.mymodule"])
reload(sys.modules["mypackage"])

参考

Stack Overflow
Reload component Y imported with 'from X import Y' In Python, once I have imported a module X in an interpreter session using import X, and the module changes on the outside, I can reload the module with reload(...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次