Pythonのバイトコードまで

PythonスクリプトからPythonバイトコードまで、どうなっているかを追いかけてみた。
具体的には、Pythonスクリプトから、pycファイルが保存されるまでである。
コマンドラインスクリプトで実行する場合は以下に相当する

# python -m compileall file.py

import py_compile
py_compile.compile("file.py")

Pythonスクリプトは、パースされ、AST (抽象構文木) を生成し、CFG (制御フローグラフ) となり、バイトコードとして生成される。CFGから、バイトコードは、assemble()で生成する。
pycの書式は、以下からなっている。(_code_to_bytecode()関数にて)

  1. MAGIC_NUMBER
  2. mtime
  3. size
  4. code

ついでながら、codeは、marshall(シリアライズ)している。