32.11. compileall — Python ライブラリをバイトコンパイル

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


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

32.11.1. コマンドラインでの使用

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

directory ...
file ...

位置引数は、コンパイルするファイル群か、再帰的に横断されるディレクトリでソースファイル群を含むものです。引数が与えられなければ、-l <directories from sys.path> を渡したのと同じように動作します。

-l

サブディレクトリを再帰処理せず、指名または暗示されたディレクトリ群に含まれるソースコードファイル群だけをコンパイルします。

-f

タイムスタンプが最新であってもリビルドを強制します。

-q

コンパイルされたファイルを一覧表示せず、エラーメッセージのみ表示します。

-d destdir

コンパイルされるそれぞれのファイルへのパスの先頭に、ディレクトリを追加します。これはコンパイル時トレースバックに使われ、バイトコードファイルが実行される時点でソースファイルが存在しない場合に、トレースバックやその他のメッセージに使われるバイトコードファイルにもコンパイルされます。

-x regex

regex を使って、コンパイル候補のそれぞれのファイルのフルパスを検索し、regex がマッチしたファイルを除外します。

-i list

ファイル list を読み込み、そのファイルのそれぞれの行を、コンパイルするファイルとディレクトリのリストに加えます。list- なら、stdin の行を読み込みます。

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

32.11.2. パブリックな関数

compileall.compile_dir(dir[, maxlevels[, ddir[, force[, rx[, quiet]]]]])

dir で指定されたディレクトリを再帰的に下降し、見つかった .py を全てコンパイルします。

maxlevels パラメタは、再帰する深さの限度に使われ、デフォルトは 10 です。

ddir が与えられれば、コンパイルされるそれぞれのファイルへのパスの先頭に、そのディレクトリを追加します。これはコンパイル時トレースバックに使われ、バイトコードファイルが実行される時点でソースファイルが存在しない場合に、トレースバックやその他のメッセージに使われるバイトコードファイルにもコンパイルされます。

force が真の場合、モジュールはファイルの更新日付に関わりなく再コンパイルされます。

rx が与えられれば、コンパイル候補のそれぞれのファイルのフルパスに対して検索メソッドが呼び出され、それが真値を返したら、そのファイルは除外されます。

quiet が真の場合、エラーが起こらない限り標準出力に何も表示しません。

compileall.compile_file(fullname[, ddir[, force[, rx[, quiet]]]])

パス fullname のファイルをコンパイルします。

ddir が与えられれば、コンパイルされるファイルへのパスの先頭に、そのディレクトリを追加します。これはコンパイル時トレースバックに使われ、バイトコードファイルが実行される時点でソースファイルが存在しない場合に、トレースバックやその他のメッセージに使われるバイトコードファイルにもコンパイルされます。

rx が与えられれば、コンパイル候補のファイルのフルパスに対して検索メソッドが呼び出され、それが真値を返したら、ファイルはコンパイルされず、True が返されます。

quiet が真の場合、エラーが起こらない限り標準出力に何も表示しません。

バージョン 2.7 で追加.

compileall.compile_path([skip_curdir[, maxlevels[, force]]])

sys.path に含まれる、全ての .py ファイルをバイトコンパイルします。 skip_curdir が真(デフォルト)の時、カレントディレクトリは検索されません。その他のパラメタはすべて compile_dir() 関数に渡されます。なお、他のコンパイル関数とは違い、 maxlevels* のデフォルトは 0 です。

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)

参考

Module py_compile
一つのソースファイルをバイトコンパイルします。