1

Windows 7のpythonコマンドラインからmodule1.pyをインポートすると、対応するmodule1.pycファイルがPython32 / pycache /フォルダーに表示されます。私の理解では、Pythonインタープリターによって実行されるのはこのバイトコードですが、module1.pycファイルを削除しても、モジュール関数(module1.func1()など)をコマンドラインから呼び出すことができます。関数が呼び出されたが.pycファイルがない場合は何が実行されていますか?バイトコードがコンパイルされると、Pythonシェルのランタイムメモリにもコピーされますか?

4

2 に答える 2

5

インタプリタの実行中、バイトコードはメモリ内にあります。.pyc ファイルはコードの次のインポート用のキャッシュであるため、コードが変更されていない場合、Python はコードを解析する必要がありません。

于 2012-05-28T13:03:07.033 に答える
4

TL; DR

Pythonは常にコンパイル済みのバイトコードを実行しており、実行時にコンパイルされるか、ディスク上の.pycファイルから読み取られます。

少し長い答え

バイトコードのコンパイルが必要な場合、Pythonはpy_compileまたはcompileallを呼び出します。有効なプリコンパイルされたバイトコードが.pycファイルで見つかった場合、Pythonはそれを使用します。元のソースファイルが存在しなくても、これを行うことができます。

.pycファイルがない場合、またはソースファイルがプリコンパイルされたバイトコードよりも新しい場合、Pythonはソースファイルを使用して再コンパイルします。それがあなたが観察している行動です。

公式回答

正規の回答については、PEP 3147:PYCリポジトリディレクトリを参照してください。

于 2012-05-28T13:32:04.483 に答える