Python 3で既にインポートしたモジュールをリロードしようとしています。一度インポートするだけで、import
コマンドを再度実行しても何も起こりません。
reload(foo)
を実行するとこのエラーが発生します:
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
...
NameError: name 'reload' is not defined
エラーはどういう意味ですか?
reload
はPython 2に組み込まれていますが、Python 3には組み込まれていません。そのため、表示されるエラーが予想されます。
Python 3のモジュールを本当にリロードする必要がある場合は、次のいずれかを使用する必要があります。
importlib.reload
for Python 3.4以降imp.reload
for Python 3.0から3.3(Python 3.4以降、非推奨 importlib
)> = Python3.4の場合:
import importlib
importlib.reload(module)
<= Python3.3の場合:
import imp
imp.reload(module)
Python2.xの場合:
組み込みのreload()
関数を使用します。
reload(module)
import imp
imp.reload(script4)
以前に書かれた回答を拡張するために、Pythonバージョン2および3で機能する単一のソリューションが必要な場合は、次を使用できます。
try:
reload # Python 2.7
except NameError:
try:
from importlib import reload # Python 3.4+
except ImportError:
from imp import reload # Python 3.0 - 3.3
すべてのpythonバージョンで動作するため、次のスニペットを使用することをお勧めします(six
が必要です):
from six.moves import reload_module
reload_module(module)
Python2およびpython3の互換性のために、次を使用できます。
# Python 2 and 3
from imp import reload
reload(mymodule)
外部ライブラリを使用したくない場合、1つの解決策は、以下のようにpython 3のpython 2からリロードメソッドを再作成することです。これをモジュールの上部で使用します(python 3.4以降を想定)。
import sys
if(sys.version_info.major>=3):
def reload(MODULE):
import importlib
importlib.reload(MODULE)
pythonファイルを設定ファイルとして使用し、アプリケーションの再起動を避けたい場合は、BTWのリロードが非常に必要です。