私はよく Python インタープリターでモジュールをテストし、エラーを見つけたらすぐに .py ファイルを更新します。しかし、それをインタープリターに反映させるにはどうしたらいいでしょうか? これまでのところ、ファイルを再度インポートしてもうまくいかないため、インタープリターを終了して再度入力しています。
ベストアンサー1
Python3のアップデート: (すでに回答済みの回答(最後の編集/コメントでは非推奨の方法が提案されていたため)
Python 3では
reload
、imp
モジュール。3.4ではimp
廃止され、importlib
、 そしてreload
後者に追加されました。3 以降を対象とする場合は、呼び出し時に適切なモジュールを参照するかreload
、インポートしてください。
取り除く:
- Python3 >= 3.4:
importlib.reload(packagename)
- Python3 < 3.4:
imp.reload(packagename)
- Python2: 以下に続く
組み込み関数を使用しますreload
:
https://docs.python.org/2/library/functions.html#リロード
実行されるタイミング
reload(module)
:
- Python モジュールのコードが再コンパイルされ、モジュール レベルのコードが再実行され、モジュールの辞書内の名前にバインドされた新しいオブジェクト セットが定義されます。拡張モジュールの init 関数は 2 度目に呼び出されません。
- Python の他のすべてのオブジェクトと同様に、古いオブジェクトは参照カウントがゼロになった後にのみ再利用されます。
- モジュール名前空間内の名前は、新しいオブジェクトまたは変更されたオブジェクトを指すように更新されます。
- 古いオブジェクトへのその他の参照 (モジュール外部の名前など) は、新しいオブジェクトを参照するために再バインドされないため、必要に応じて、それらが発生する各名前空間で更新する必要があります。
例:
# Make a simple function that prints "version 1"
shell1$ echo 'def x(): print "version 1"' > mymodule.py
# Run the module
shell2$ python
>>> import mymodule
>>> mymodule.x()
version 1
# Change mymodule to print "version 2" (without exiting the python REPL)
shell2$ echo 'def x(): print "version 2"' > mymodule.py
# Back in that same python session
>>> reload(mymodule)
<module 'mymodule' from 'mymodule.pyc'>
>>> mymodule.x()
version 2