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