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"
     一つのソースファイルをバイトコンパイルします。
