32.10. py_compile — Pythonソースファイルのコンパイル—Pythonドキュメント
32.10。 py_compile —Pythonソースファイルをコンパイルします
ソースコード: :source: `Lib / py_compile.py`
py_compile モジュールは、ソースファイルからバイトコードファイルを生成する関数と、モジュールのソースファイルがスクリプトとして呼び出されるときに使用される別の関数を提供します。
あまり必要ではありませんが、この関数は、共有用のモジュールをインストールする場合、特に一部のユーザーがソースコードを含むディレクトリにバイトコードキャッシュファイルを書き込む権限を持っていない場合に役立ちます。
- exception py_compile.PyCompileError
- ファイルのコンパイル中にエラーが発生すると例外が発生します。
- py_compile.compile(file, cfile=None, dfile=None, doraise=False, optimize=- 1)
ソースファイルをコンパイルしてバイトコードにし、バイトコードキャッシュファイルを書き出します。 ソースコードは、 file という名前のファイルからロードされます。 バイトコードは cfile に書き込まれ、デフォルトでは PEP 3147 / PEP 488 パスになります。
.pyc
で終わります。 たとえば、 file が/foo/bar/baz.py
の場合、Python3.2では cfile はデフォルトで/foo/bar/__pycache__/baz.cpython-32.pyc
になります。 dfile が指定されている場合、 file の代わりに、エラーメッセージのソースファイルの名前として使用されます。 doraise がtrueの場合、ファイルのコンパイル中にエラーが発生すると、 PyCompileError が発生します。 doraise がfalse(デフォルト)の場合、エラー文字列がsys.stderr
に書き込まれますが、例外は発生しません。 この関数は、バイトコンパイルされたファイルへのパスを返します。 cfile の値が使用されたものは何でも。cfile が(明示的に指定または計算された)パスになるパスがシンボリックリンクまたは非正規ファイルの場合、 FileExistsError が発生します。 これは、バイトコンパイルされたファイルをそれらのパスに書き込むことが許可されている場合、インポートがそれらのパスを通常のファイルに変換するという警告として機能します。 これは、ファイルの名前変更を使用してインポートすることの副作用であり、ファイルの同時書き込みの問題を防ぐために、最終的なバイトコンパイル済みファイルを所定の位置に配置します。
optimize は最適化レベルを制御し、組み込みの compile()関数に渡されます。 デフォルトの
-1
は、現在のインタープリターの最適化レベルを選択します。バージョン3.2で変更: cfile のデフォルト値を PEP 3147 準拠に変更しました。 以前のデフォルトはファイル +
'c'
(最適化が有効になっている場合は'o'
)でした。 optimize パラメーターも追加されました。バージョン3.4で変更:バイトコードキャッシュファイルの書き込みに importlib を使用するようにコードを変更しました。 これは、ファイルの作成/書き込みのセマンティクスが importlib の機能と一致することを意味します。 権限、書き込みと移動のセマンティクスなど。 また、 cfile がシンボリックリンクまたは非正規ファイルの場合、 FileExistsError が発生するという警告を追加しました。
- py_compile.main(args=None)
いくつかのソースファイルをコンパイルします。 args (または、 args が
None
の場合はコマンドライン)で指定されたファイルがコンパイルされ、結果のバイトコードが通常の方法でキャッシュされます。 この関数は、ソースファイルを見つけるためにディレクトリ構造を検索しません。 明示的に指定されたファイルのみをコンパイルします。'-'
がargsの唯一のパラメーターである場合、ファイルのリストは標準入力から取得されます。バージョン3.2で変更:
'-'
のサポートが追加されました。
このモジュールをスクリプトとして実行すると、 main()を使用して、コマンドラインで指定されたすべてのファイルがコンパイルされます。 ファイルの1つをコンパイルできなかった場合、終了ステータスはゼロ以外です。