py_compile — Pythonソースファイルのコンパイル—Pythonドキュメント
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, invalidation_mode=PycInvalidationMode.TIMESTAMP, quiet=0)
ソースファイルをコンパイルしてバイトコードにし、バイトコードキャッシュファイルを書き出します。 ソースコードは、 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 の値が使用されたものは何でも。doraise および quiet 引数は、ファイルのコンパイル中にエラーがどのように処理されるかを決定します。 quick が0または1で、 doraise がfalseの場合、デフォルトの動作が有効になります。エラー文字列が
sys.stderr
に書き込まれ、関数はNone
。 doraise がtrueの場合、代わりに PyCompileError が発生します。 ただし、 quick が2の場合、メッセージは書き込まれず、 doraise は効果がありません。cfile が(明示的に指定または計算された)パスになるパスがシンボリックリンクまたは非正規ファイルの場合、 FileExistsError が発生します。 これは、バイトコンパイルされたファイルをそれらのパスに書き込むことが許可されている場合、インポートがそれらのパスを通常のファイルに変換するという警告として機能します。 これは、ファイルの名前変更を使用してインポートすることの副作用であり、ファイルの同時書き込みの問題を防ぐために、最終的なバイトコンパイル済みファイルを所定の位置に配置します。
optimize は最適化レベルを制御し、組み込みの compile()関数に渡されます。 デフォルトの
-1
は、現在のインタープリターの最適化レベルを選択します。invalidation_mode は PycInvalidationMode 列挙型のメンバーである必要があり、生成されたバイトコードキャッシュを実行時に無効にする方法を制御します。
SOURCE_DATE_EPOCH
環境変数が設定されている場合、デフォルトは PycInvalidationMode.CHECKED_HASH です。それ以外の場合、デフォルトは PycInvalidationMode.TIMESTAMP です。バージョン3.2で変更: cfile のデフォルト値を PEP 3147 準拠に変更しました。 以前のデフォルトはファイル +
'c'
(最適化が有効になっている場合は'o'
)でした。 optimize パラメーターも追加されました。バージョン3.4で変更:バイトコードキャッシュファイルの書き込みに importlib を使用するようにコードを変更しました。 これは、ファイルの作成/書き込みのセマンティクスが importlib の機能と一致することを意味します。 権限、書き込みと移動のセマンティクスなど。 また、 cfile がシンボリックリンクまたは非正規ファイルの場合、 FileExistsError が発生するという警告を追加しました。
バージョン3.7で変更: invalidation_mode パラメーターは、 PEP 552 で指定されているように追加されました。
SOURCE_DATE_EPOCH
環境変数が設定されている場合、 invalidation_mode は PycInvalidationMode.CHECKED_HASH に強制されます。バージョン3.7.2で変更:
SOURCE_DATE_EPOCH
環境変数は、 invalidation_mode 引数の値をオーバーライドしなくなり、代わりにデフォルト値を決定します。バージョン3.8で変更: クワイエットパラメーターが追加されました。
- class py_compile.PycInvalidationMode
インタプリタがバイトコードファイルがソースファイルで最新であるかどうかを判断するために使用できる可能なメソッドの列挙。
.pyc
ファイルは、ヘッダーに目的の無効化モードを示します。 Pythonが実行時に.pyc
ファイルを無効にする方法の詳細については、キャッシュされたバイトコードの無効化を参照してください。バージョン3.7の新機能。
- TIMESTAMP
.pyc
ファイルには、ソースファイルのタイムスタンプとサイズが含まれています。Pythonは実行時にソースファイルのメタデータと比較して、.pyc
ファイルを再生成する必要があるかどうかを判断します。
- CHECKED_HASH
.pyc
ファイルには、ソースファイルの内容のハッシュが含まれています。Pythonは実行時にソースと比較して、.pyc
ファイルを再生成する必要があるかどうかを判断します。
- UNCHECKED_HASH
CHECKED_HASH と同様に、
.pyc
ファイルにはソースファイルの内容のハッシュが含まれています。 ただし、Pythonは実行時に、.pyc
ファイルが最新であると想定し、ソースファイルに対して.pyc
をまったく検証しません。このオプションは、ビルドシステムなどのPython外部のシステムによって
.pycs
が最新の状態に保たれている場合に役立ちます。
- py_compile.main(args=None)
いくつかのソースファイルをコンパイルします。 args (または、 args が
None
の場合はコマンドライン)で指定されたファイルがコンパイルされ、結果のバイトコードが通常の方法でキャッシュされます。 この関数は、ソースファイルを見つけるためにディレクトリ構造を検索しません。 明示的に指定されたファイルのみをコンパイルします。'-'
がargsの唯一のパラメーターである場合、ファイルのリストは標準入力から取得されます。バージョン3.2で変更:
'-'
のサポートが追加されました。
このモジュールをスクリプトとして実行すると、 main()を使用して、コマンドラインで指定されたすべてのファイルがコンパイルされます。 ファイルの1つをコンパイルできなかった場合、終了ステータスはゼロ以外です。