この記事で分かること
- 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"])
コメント