compileall —バイトコンパイルPythonライブラリ—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.9/library/compileall
移動先:案内検索

compileall —Pythonライブラリのバイトコンパイル

ソースコード: :source: `Lib / compileall.py`



このモジュールは、Pythonライブラリのインストールをサポートするいくつかのユーティリティ関数を提供します。 これらの関数は、Pythonソースファイルをディレクトリツリーにコンパイルします。 このモジュールを使用すると、ライブラリのインストール時にキャッシュされたバイトコードファイルを作成できます。これにより、ライブラリディレクトリへの書き込み権限がないユーザーでも使用できるようになります。

コマンドラインでの使用

このモジュールは、( python -m compileall を使用して)スクリプトとして機能し、Pythonソースをコンパイルできます。

directory ...

file ...

位置引数は、コンパイルするファイル、または再帰的にトラバースされるソースファイルを含むディレクトリです。 引数が指定されていない場合は、コマンドラインが-l <directories from sys.path>であるかのように動作します。
-l
サブディレクトリに再帰せず、名前付きまたは暗黙のディレクトリに直接含まれているソースコードファイルのみをコンパイルします。
-f
タイムスタンプが最新であっても、強制的に再構築します。
-q
コンパイルされたファイルのリストを印刷しないでください。 一度渡された場合でも、エラーメッセージが出力されます。 2回渡すと(-qq)、すべての出力が抑制されます。
-d destdir
コンパイルされる各ファイルへのパスの前にディレクトリが追加されます。 これはコンパイル時のトレースバックに表示され、バイトコードファイルにもコンパイルされます。バイトコードファイルの実行時にソースファイルが存在しない場合は、トレースバックやその他のメッセージで使用されます。
-s strip_prefix
-p prepend_prefix
.pycファイルに記録されているパスの指定されたプレフィックスを削除(-s)または追加(-p)します。 -dとの併用はできません。
-x regex
正規表現は、コンパイルの対象となる各ファイルへのフルパスを検索するために使用され、正規表現が一致する場合、ファイルはスキップされます。
-i list
ファイルlistを読み取り、ファイルに含まれる各行をコンパイルするファイルとディレクトリのリストに追加します。 list-の場合、stdinから行を読み取ります。
-b
バイトコードファイルを従来の場所と名前に書き込みます。これにより、別のバージョンのPythonで作成されたバイトコードファイルが上書きされる可能性があります。 デフォルトでは、ファイルを PEP 3147 の場所と名前に書き込みます。これにより、Pythonの複数のバージョンのバイトコードファイルを共存させることができます。
-r
サブディレクトリの最大再帰レベルを制御します。 これが指定されている場合、-lオプションは考慮されません。 python -m compileall -r 0 と同等です python -m compileall -l
-j N
N ワーカーを使用して、指定されたディレクトリ内のファイルをコンパイルします。 0を使用すると、 os.cpu_count()の結果が使用されます。
--invalidation-mode [timestamp|checked-hash|unchecked-hash]
生成されたバイトコードファイルを実行時に無効にする方法を制御します。 timestamp値は、ソースのタイムスタンプとサイズが埋め込まれた.pycファイルが生成されることを意味します。 checked-hashおよびunchecked-hashの値により、ハッシュベースのpycが生成されます。 ハッシュベースのpycsは、タイムスタンプではなく、ソースファイルの内容のハッシュを埋め込みます。 Pythonが実行時にバイトコードキャッシュファイルを検証する方法の詳細については、キャッシュされたバイトコードの無効化を参照してください。 デフォルトは、 SOURCE_DATE_EPOCH環境変数が設定されていない場合はtimestampSOURCE_DATE_EPOCH環境変数が設定されている場合はchecked-hashです。
-o level
指定された最適化レベルでコンパイルします。 一度に複数のレベルでコンパイルするために複数回使用できます(たとえば、compileall -o 1 -o 2)。
-e dir
指定されたディレクトリの外側を指すシンボリックリンクを無視します。
--hardlink-dupes
最適化レベルが異なる2つの.pycファイルのコンテンツが同じである場合は、ハードリンクを使用して重複ファイルを統合します。

バージョン3.2で変更: -i-b、および-hオプションが追加されました。


バージョン3.5で変更: -j-r、および-qqオプションが追加されました。 -qオプションがマルチレベル値に変更されました。 -bは、常に.pycで終わるバイトコードファイルを生成し、.pyoは生成しません。


バージョン3.7で変更: --invalidation-modeオプションが追加されました。


バージョン3.9で変更: -s-p-e、および--hardlink-dupesオプションが追加されました。 デフォルトの再帰制限を10から sys.getrecursionlimit()に引き上げました。 -oオプションを複数回指定する可能性を追加しました。


compile()関数で使用される最適化レベルを制御するコマンドラインオプションはありません。これは、Pythonインタープリター自体がすでにオプション python -O -m compileall を提供しているためです。

同様に、 compile()関数は、 sys.pycache_prefix 設定を尊重します。 生成されたバイトコードキャッシュは、 compile()が実行時に使用されるのと同じ sys.pycache_prefix (存在する場合)で実行される場合にのみ役立ちます。


公の行事

compileall.compile_dir(dir, maxlevels=sys.getrecursionlimit(), ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=- 1, workers=1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)

dir で指定されたディレクトリツリーを再帰的に下降し、途中ですべての.pyファイルをコンパイルします。 すべてのファイルが正常にコンパイルされた場合はtrue値を返し、それ以外の場合はfalse値を返します。

maxlevels パラメーターは、再帰の深さを制限するために使用されます。 デフォルトはsys.getrecursionlimit()です。

ddir を指定すると、コンパイル時のトレースバックで使用するためにコンパイルされる各ファイルへのパスの前に追加され、バイトコードファイルにもコンパイルされてトレースバックなどで使用されます。バイトコードファイルの実行時にソースファイルが存在しない場合のメッセージ。

force がtrueの場合、タイムスタンプが最新であっても、モジュールは再コンパイルされます。

rx が指定されている場合、そのsearchメソッドは、コンパイルの対象となる各ファイルへの完全なパスで呼び出され、真の値を返す場合、ファイルはスキップされます。 これは、 re.Pattern オブジェクトとして指定された正規表現に一致するファイルを除外するために使用できます。

quietFalseまたは0(デフォルト)の場合、ファイル名やその他の情報は標準出力で印刷されます。 1に設定すると、エラーのみが出力されます。 2に設定すると、すべての出力が抑制されます。

Legacy がtrueの場合、バイトコードファイルはレガシーの場所と名前に書き込まれ、別のバージョンのPythonで作成されたバイトコードファイルを上書きする可能性があります。 デフォルトでは、ファイルを PEP 3147 の場所と名前に書き込みます。これにより、Pythonの複数のバージョンのバイトコードファイルを共存させることができます。

optimize は、コンパイラーの最適化レベルを指定します。 組み込みの compile()関数に渡されます。 1回の呼び出しで1つの.pyファイルの複数のコンパイルにつながる一連の最適化レベルも受け入れます。

引数 workers は、ファイルを並列コンパイルするために使用されるワーカーの数を指定します。 デフォルトでは、複数のワーカーを使用しません。 プラットフォームが複数のワーカーを使用できず、 worker 引数が指定されている場合、フォールバックとして順次コンパイルが使用されます。 worker が0の場合、システム内のコアの数が使用されます。 worker0よりも低い場合、 ValueError が発生します。

invalidation_modepy_compile.PycInvalidationMode 列挙型のメンバーである必要があり、生成されたpycが実行時にどのように無効化されるかを制御します。

stripdirappenddir 、および limit_sl_dest 引数は、説明されている-s-p、および-eオプションに対応します。その上。 strbytes、または os.PathLike として指定できます。

hardlink_dupes がtrueで、最適化レベルが異なる2つの.pycファイルの内容が同じである場合は、ハードリンクを使用して重複ファイルを統合します。

バージョン3.2で変更: レガシーおよび最適化パラメーターが追加されました。

バージョン3.5で変更: worker パラメーターが追加されました。

バージョン3.5で変更: quiet パラメーターがマルチレベル値に変更されました。

バージョン3.5で変更: Legacy パラメーターは、 optimize [の値に関係なく、.pyoファイルではなく、.pycファイルのみを書き込みます。 X156X]です。

バージョン3.6で変更: パスのようなオブジェクトを受け入れます。

バージョン3.7で変更: invalidation_mode パラメーターが追加されました。

バージョン3.7.2で変更: invalidation_mode パラメーターのデフォルト値がNoneに更新されました。

バージョン3.8で変更: worker を0に設定すると、最適なコア数が選択されるようになりました。

バージョン3.9で変更: stripdirappenddirlimit_sl_dest 、および hardlink_dupes 引数が追加されました。 maxlevels のデフォルト値が10からsys.getrecursionlimit()に変更されました

compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=- 1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)

パスフルネームでファイルをコンパイルします。 ファイルが正常にコンパイルされた場合はtrue値を返し、それ以外の場合はfalse値を返します。

ddir を指定すると、コンパイル時のトレースバックで使用するためにコンパイルされるファイルへのパスの前に追加され、バイトコードファイルにもコンパイルされてトレースバックなどで使用されます。バイトコードファイルの実行時にソースファイルが存在しない場合のメッセージ。

rx が指定されている場合、そのsearchメソッドはコンパイルされるファイルへのフルパス名を渡され、true値を返す場合、ファイルはコンパイルされず、 [X168X ]が返されます。 これは、 re.Pattern オブジェクトとして指定された正規表現に一致するファイルを除外するために使用できます。

quietFalseまたは0(デフォルト)の場合、ファイル名やその他の情報は標準出力で印刷されます。 1に設定すると、エラーのみが出力されます。 2に設定すると、すべての出力が抑制されます。

Legacy がtrueの場合、バイトコードファイルはレガシーの場所と名前に書き込まれ、別のバージョンのPythonで作成されたバイトコードファイルを上書きする可能性があります。 デフォルトでは、ファイルを PEP 3147 の場所と名前に書き込みます。これにより、Pythonの複数のバージョンのバイトコードファイルを共存させることができます。

optimize は、コンパイラーの最適化レベルを指定します。 組み込みの compile()関数に渡されます。 1回の呼び出しで1つの.pyファイルの複数のコンパイルにつながる一連の最適化レベルも受け入れます。

invalidation_modepy_compile.PycInvalidationMode 列挙型のメンバーである必要があり、生成されたpycが実行時にどのように無効化されるかを制御します。

stripdirappenddir 、および limit_sl_dest 引数は、説明されている-s-p、および-eオプションに対応します。その上。 strbytes、または os.PathLike として指定できます。

hardlink_dupes がtrueで、最適化レベルが異なる2つの.pycファイルの内容が同じである場合は、ハードリンクを使用して重複ファイルを統合します。

バージョン3.2の新機能。

バージョン3.5で変更: quiet パラメーターがマルチレベル値に変更されました。

バージョン3.5で変更: Legacy パラメーターは、 optimize [の値に関係なく、.pyoファイルではなく、.pycファイルのみを書き込みます。 X156X]です。

バージョン3.7で変更: invalidation_mode パラメーターが追加されました。

バージョン3.7.2で変更: invalidation_mode パラメーターのデフォルト値がNoneに更新されました。

バージョン3.9で変更: stripdirappenddirlimit_sl_dest 、および hardlink_dupes 引数が追加されました。

compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=- 1, invalidation_mode=None)

sys.pathに沿って見つかったすべての.pyファイルをバイトコンパイルします。 すべてのファイルが正常にコンパイルされた場合はtrue値を返し、それ以外の場合はfalse値を返します。

skip_curdir がtrue(デフォルト)の場合、現在のディレクトリは検索に含まれません。 他のすべてのパラメーターは、 compile_dir()関数に渡されます。 他のコンパイル関数とは異なり、maxlevelsのデフォルトは0であることに注意してください。

バージョン3.2で変更: レガシーおよび最適化パラメーターが追加されました。

バージョン3.5で変更: quiet パラメーターがマルチレベル値に変更されました。

バージョン3.5で変更: Legacy パラメーターは、 optimize [の値に関係なく、.pyoファイルではなく、.pycファイルのみを書き込みます。 X156X]です。

バージョン3.7で変更: invalidation_mode パラメーターが追加されました。

バージョン3.7.2で変更: invalidation_mode パラメーターのデフォルト値がNoneに更新されました。

Lib/サブディレクトリとそのすべてのサブディレクトリにあるすべての.pyファイルの再コンパイルを強制するには:

import compileall

compileall.compile_dir('Lib/', force=True)

# Perform same compilation, excluding files in .svn directories.
import re
compileall.compile_dir('Lib/', rx=re.compile(r'[/\\][.]svn'), force=True)

# pathlib.Path objects can also be used.
import pathlib
compileall.compile_dir(pathlib.Path('Lib/'), force=True)

も参照してください

モジュール py_compile
単一のソースファイルをバイトコンパイルします。