私は__import__
pythonモジュールをインポートするために使用しています。ただし、その間に変更される可能性のあるモジュールを再インポートするソリューションを実装したいと思います(開発/デバッグ目的)。これを試してみても、「古い」モジュールが取得されます。これは、既にインポートされているためだと思います。同じ .py ファイル名からモジュールの新しいバージョンを何らかの方法で python に強制的に再インポートすることはできますか? 何らかのエラー防止動作が必要なため、再インポートする前に古いモジュールを削除することはできません (これは役立つと思います)。(再)インポートが失敗した場合は、古いモジュールを引き続き使用したいのです。
この多かれ少なかれ擬似コードのようなもの:
mod = None
reload_trigger = True
MODULE_NAME = "mymodule.py"
while True:
if reload_trigger:
reload_trigger = False
try:
mod_new = __import__(MODULE_NAME)
except ImportError as a:
if mod is None:
raise RuntimeError("Initial module import failed, cannot continue!")
print("Import problem, still using the old module: " + str(a))
continue
mod = mod_new
del mod_new
mod.main_loop_iterate_etc() # it may also set reload_trigger to True
Afaik reload() を使用してモジュールを再インポートできますが、再インポートが失敗した場合の状況を処理する方法がわからないため、代わりに古いモジュールを引き続き使用できます。例外ハンドラーで reload() を「保護」して、インポートの問題などをキャッチするだけで十分ですか?
また、再インポートしたモジュールがインポートするすべてのモジュールをリロードする状況を手動で処理する必要がありますか? 「依存関係」と同様にそれらをリロードしたいので。
ありがとう!