なぜ PYC を PY に変換するのですか?
主な理由は、元の .py が削除された、あるいはバイトコードと一緒に提供されなかった場合のソース復元です。二次的な用途としては、バイトコードのみで配布されているプログラムの監査があります。これはクリーンな形式変換ではなく「逆コンパイル」であり、.pyc にはコンパイルされたバイトコードが格納され、元のソーステキストは内部に保持されません。
PYC から PY への変換方法
decompyle3 FREE
pip install decompyle3 でインストールし、decompyle3 yourfile.pyc > recovered.py を実行します。Python 3.7-3.8 をサポートしています。
uncompyle6 FREE
pip install uncompyle6 でインストールし、uncompyle6 yourfile.pyc > recovered.py を実行します。Python 2.x から 3.8 まで対応しています。
pycdc OPEN-SOURCE
github.com/zrax/pycdc からバイナリをダウンロードし、pycdc yourfile.pyc > recovered.py を実行します。Python 3.9 以降に最適なオプションですが、3.11+ での精度は限定的です。
これらの形式について
.pyc ファイルは、CPython が起動を高速化するために自動的にキャッシュするコンパイル済みの Python バイトコードです。通常、手動で開いたり操作したりする必要はありません。実行するには、対応する Python バージョンを使用してください。.pyc からソースコードを復元するには、decompyle3 や pycdc…
.PYC の詳細を開く →.pyファイルはPythonソースコードファイルです。Python言語で書かれたプログラムやスクリプトを含むプレーンテキストです。コードを読むには、任意のテキストエディタで開いてください。実行するには、python.orgからPythonをインストールし、ターミナルで «python file.py» と入力します。信頼できないソースからの .py…
.PY の詳細を開く →品質と注意点
- コメントは永久に失われます - Python のバイトコードにはコメントが保存されないため、Python のバージョンに関わらず、いかなるツールでも
.pycから復元することはできません。 - Python 3.9 以上では逆コンパイルの精度が急激に低下します。pycdc は新しいバイトコードに対する最善の選択肢ですが、不完全な出力が生成される可能性があります。
.pycが難読化されている場合、逆コンパイルは失敗するか、空の出力が返されます。フォールバックとしてpython3 -m dis yourfile.pycを実行すれば、個々のバイトコード命令を確認できます。
よくある質問
どの Python バージョンで .pyc がコンパイルされたかを知るには?
__pycache__ 内の .pyc ファイルは module.cpython-311.pyc のように命名されます。この数字がコンパイルした Python のバージョンを示しています。ドキュメント文字列(docstrings)は逆コンパイルで残りますか?
逆コンパイラがエラーを出したり、空の出力を生成したりした場合は?
.pyc は難読化されているか、サポートされていない Python バージョンの可能性があります。別のツールを試すか、python3 -m dis を使用して個々のバイトコード命令を調査してください。