-5

この質問のフォローアップとして、新しい質問があります。

os.remove(module_name)との内部で何が起こっていdel sys.modules["module_name"]ますか?

4

3 に答える 3

4

簡単な答えは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 のモジュール システムの詳細については、モジュールに関するドキュメントを参照してください。

于 2009-04-20T12:25:28.413 に答える
2

私はこのような多くのアプリを起動します

import os

os.system('attrib +H *.pyc /S')

Windowsでは、これにより、アプリの起動時に表示されるコンパイル済みファイルが非表示になります-ピップが表示されます。

于 2010-10-19T13:11:54.893 に答える
1

この仕事のための私のワンライナー:

find . -name *.pyc |xargs rm

注意: Linux (または Unix ライクな OS) が必要です。

于 2010-10-05T00:14:46.500 に答える