この質問のフォローアップとして、新しい質問があります。
os.remove(module_name)との内部で何が起こっていdel sys.modules["module_name"]ますか?
この質問のフォローアップとして、新しい質問があります。
os.remove(module_name)との内部で何が起こっていdel sys.modules["module_name"]ますか?
簡単な答えはos.remove(module_name)、ファイルシステムからファイルを削除することです。 del sys.modules["module_name"]現在の Python インタープリターが維持している、以前にロードされたモジュールのキャッシュからモジュールを削除します。
Python では、モジュールをインポートすると、インタープリターは、インポートしようとしているファイル.pycと同じ名前のファイルがあるかどうかを確認し.pyます。存在し、ファイルがインポートされて.pyからファイルが変更されていない場合、Python はファイルをロードします (これは非常に高速です)。 .pyc.pyc
ファイル.pycが存在しない場合、またはファイルの作成後にファイルが.py変更されている場合は、ファイルがロードされ、新しいファイルが作成されます。(単に Python ファイルを実行するだけではaは作成されないことに注意してください。これが発生するのは ing modules だけです。).pyc.py.pyctest.pytest.pycimport
sys.modulesはまったく別の問題です。同じモジュールを 2 回インポートするコードを高速化するために、Python は現在のインタープリター セッション中にインポートされたモジュールのリストを維持します。インポートされるモジュールが にある場合sys.modules、キャッシュされたバージョンが読み込まれます (ディスク上のファイルもチェックされません) .py。Python には、モジュール キャッシュをバイパスしてディスクから強制的にリロードできる.pyc組み込み関数が用意されています。reload()
Python のモジュール システムの詳細については、モジュールに関するドキュメントを参照してください。
私はこのような多くのアプリを起動します
import os
os.system('attrib +H *.pyc /S')
Windowsでは、これにより、アプリの起動時に表示されるコンパイル済みファイルが非表示になります-ピップが表示されます。
この仕事のための私のワンライナー:
find . -name *.pyc |xargs rm
注意: Linux (または Unix ライクな OS) が必要です。