なぜ PYC を PYO に変換するのですか?
.pyo は Python の最適化されたバイトコードであり、.pyc とほぼ同一でしたが、assert 文が削除され、オプションで docstring が削除されるという違いがありました。Python 3.5 では最適化レベルが .pyc のファイル名に組み込まれたため、.pyo は冗長となり完全に削除されました。3.5 以降の Python バージョンでは .pyo ファイルの読み書きを行わないため、PYC から PYO へのコンバーターには正当な目的がありません。
これらの形式について
.pyc ファイルは、CPython が起動を高速化するために自動的にキャッシュするコンパイル済みの Python バイトコードです。通常、手動で開いたり操作したりする必要はありません。実行するには、対応する Python バージョンを使用してください。.pyc からソースコードを復元するには、decompyle3 や pycdc…
.PYC の詳細を開く →.pyoファイルは、Pythonを -O または -OO フラグで実行した際に生成されるレガシーなPython最適化済みバイトコードキャッシュです。バイナリ形式は .pyc ファイルと同一です。Python 3.5において2015年(PEP 488)に .pyo 拡張子は廃止されたため、現在これを見かける場合は Python 2 または Python 3.0-3.4…
.PYO の詳細を開く →品質と注意点
- Python 3.5 以降で最適化されたバイトコードを生成するには、
python -O -m compileall yourscript.pyを実行します。結果は__pycache__フォルダ内にopt-1という名前が付いた.pycファイルとして保存されます。 - Python 2 または初期の Python 3 プロジェクトの
.pyoファイルがある場合は、拡張子を.pycに変更して、対応する Python バージョンで実行できます。マジックナンバーが一致すればインタープリタが読み込みます。 - 削除される前でも
pyoと.pycは機能的にほぼ同一でした。これこそが、Python 3.5 で個別の拡張子が廃止された理由です。
よくある質問
.pyo は .pyc と同じですか?
assert 文の無効化でしたが、それが理由で Python 3.5 で個別の拡張子が廃止されました。古いプロジェクトの .pyo ファイルがあります。まだ使えますか?
.pyc にリネームして実行できます。Python 3.5 以降は .pyo ファイルを作成しませんが、実行することは可能です。