29.2. "sysconfig" --- Python の構成情報にアクセスする
*****************************************************

バージョン 3.2 で追加.

**ソースコード:** Lib/sysconfig.py

======================================================================

"sysconfig" モジュールは、インストールパスのリストや、現在のプラットフ
ォームに関連した構成などの、Python の構成情報 (configuration
information) へのアクセスを提供します。


29.2.1. 構成変数
================

Python の配布物は、Python 自体のバイナリや、"distutils" によってコンパ
イルされる外部の C 拡張をビルドするために必要な、"Makefile" と
"pyconfig.h" ヘッダーファイルを含んでいます。

"sysconfig" はこれらのファイルに含まれるすべての変数を辞書に格納し、
"get_config_vars()" や "get_config_var()" でアクセスできるようにします
。

Windows では構成変数はだいぶ少なくなります。

sysconfig.get_config_vars(*args)

   引数がない場合、現在のプラットフォームに関するすべての構成変数の辞
   書を返します。

   引数がある場合、各引数を構成変数辞書から検索した結果の変数のリスト
   を返します。

   各引数において、変数が見つからなかった場合は "None" が返されます。

sysconfig.get_config_var(name)

   1つの変数 *name* を返します。"get_config_vars().get(name)" と同じで
   す。

   *name* が見つからない場合、"None" を返します。

Example of usage:

   >>> import sysconfig
   >>> sysconfig.get_config_var('Py_ENABLE_SHARED')
   0
   >>> sysconfig.get_config_var('LIBDIR')
   '/usr/local/lib'
   >>> sysconfig.get_config_vars('AR', 'CXX')
   ['ar', 'g++']


29.2.2. インストールパス
========================

Python はプラットフォームとインストールオプションによって、異なるイン
ストールスキームを利用します。このスキームは、"os.name" の値に基づいて
ユニークな識別子で "sysconfig" に格納されます。

"distutils" やそれに基づいたシステムによって新しいコンポーネントをイン
ストールするときは、同じスキームに従ってファイルを正しい場所にコピーし
ます。

Python は現在7つのスキームをサポートしています:

* *posix_prefix*: Linux や Mac OS X などの Posix プラットフォーム用
  の スキームです。これは Python やコンポーネントをインストールすると
  きに 使われるデフォルトのスキームです。

* *posix_home*: インストール時に *home* オプションが利用された場合に
  お ける、Posix プラットフォーム用のスキームです。このスキームはコン
  ポー ネントが Distutils に特定の home prefix を指定してインストール
  された ときに利用されます。

* *posix_user*: Distutils に *user* オプションを指定してコンポーネン
  ト をインストールするときに使われる、Posix プラットフォーム用のスキ
  ーム です。このスキームはユーザーのホームディレクトリ以下に配置され
  たパス ヲ定義します。

* *nt*: Windows などの NT プラットフォーム用のスキームです。

* *nt_user*: *user* オプションが利用された場合の、NT プラットフォー
  ム 用のスキームです。

各スキームは、ユニークな識別子を持ったいくつかのパスの集合から成ってい
ます。現在 Python は8つのパスを利用します:

* *stdlib*: プラットフォーム非依存の、標準 Python ライブラリファイル
  を 格納するディレクトリ.

* *platstdlib*: プラットフォーム依存の、標準 Python ライブラリファイ
  ル を格納するディレクトリ.

* *platlib*: プラットフォーム依存の、site ごとのファイルを格納するデ
  ィ レクトリ。

* *purelib*: プラットフォーム非依存の、site ごとのファイルを格納する
  デ ィレクトリ。

* *include*: プラットフォーム非依存のヘッダーファイルを格納するディ
  レ クトリ。

* *platinclude*: プラットフォーム依存の、ヘッダーファイルを格納する
  デ ィレクトリ。

* *scripts*: スクリプトファイルのためのディレクトリ。

* *data*: データファイルのためのディレクトリ。

"sysconfig" はこれらのパスを決定するためのいくつかの関数を提供していま
す。

sysconfig.get_scheme_names()

   現在 "sysconfig" でサポートされているすべてのスキームを格納したタプ
   ルを返します。

sysconfig.get_path_names()

   現在 "sysconfig" でサポートされているすべてのパス名を格納したタプル
   を返します。

sysconfig.get_path(name[, scheme[, vars[, expand]]])

   *scheme* で指定されたインストールスキームから、パス *name* に従って
   インストールパスを返します。

   *name* は "get_path_names()" が返すリストに含まれる値でなければなり
   ません。

   "sysconfig" はインストールパスを、パス名、プラットフォーム、展開さ
   れる変数に従って格納します。例えば、*nt* スキームでの *stdlib* パス
   は "{base}/Lib" になります。

   "get_path()" はパスを展開するのに "get_config_vars()" が返す変数を
   利用します。すべての変数は各プラットフォームにおいてデフォルト値を
   持っていて、この関数を呼び出したときにデフォルト値を取得する場合が
   あります。

   *scheme* が指定された場合、"get_scheme_names()" が返すリストに含ま
   れる値でなければなりません。指定されなかった場合は、現在のプラット
   フォームでのデフォルトスキームが利用されます。

   *vars* が指定された場合、"get_config_vars()" が返す辞書をアップデー
   トする変数辞書でなければなりません。

   *expand* が "False" に設定された場合、パスは変数を使って展開されま
   せん。

   *name* が見つからない場合、"None" を返します。

sysconfig.get_paths([scheme[, vars[, expand]]])

   インストールスキームに基づいたすべてのインストールパスを格納した辞
   書を返します。詳しい情報は "get_path()" を参照してください。

   *scheme* が指定されない場合、現在のプラットフォームでのデフォルトス
   キーマが使用されます。

   *vars* を指定する場合、パスを展開するために使用される辞書を更新する
   値の辞書でなければなりません。

   *expand* に偽を指定すると、パスは展開されません。

   *scheme* が実在するスキームでなかった場合、"get_paths()" は
   "KeyError" を発生させます。


29.2.3. その他の関数
====================

sysconfig.get_python_version()

   "MAJOR.MINOR" の型の Python バージョン番号文字列を返します。
   "'%d.%d' % sys.version_info[:2]" に似ています。

sysconfig.get_platform()

   現在のプラットフォームを識別するための文字列を返します。

   この関数は主に、プラットフォーム依存のビルドディレクトリやビルド済
   み配布物を判別するために利用します。通常は OS 名、バージョン、およ
   び ("os.uname()" で提供される) アーキテクチャを含みますが、実際の情
   報は OS 依存です。例えば、IRIX ではアーキテクチャは重要ではない
   (IRIX は SGI のハードでしか動きません) のに対して、Linux ではカーネ
   ルのバージョンが重要な情報ではありません。

   返される値の例:

   * linux-i586

   * linux-alpha (?)

   * solaris-2.6-sun4u

   * irix-5.3

   * irix64-6.2

   Windows では以下のどれかを返します:

   * win-amd64 (64bit Windows on AMD64, 別名 x86_64, Intel64, EM64T)

   * win-ia64 (Itanium 上の 64bit Windows)

   * win32 (その他すべて - 具体的には sys.platform が返す値)

   Mac OS X では以下のどれかを返します:

   * macosx-10.6-ppc

   * macosx-10.4-ppc64

   * macosx-10.3-i386

   * macosx-10.4-fat

   その他の非 POSIX プラットフォームでは、現在のところ単に
   "sys.platform" を返します。

sysconfig.is_python_build()

   実行中の Python インタプリタがソースからビルドされ、かつそのビルド
   された場所から実行されている場合に "True" を返します。 "make
   install" を実行した場所からの実行やバイナリインストーラによるインス
   トールではいけません。

sysconfig.parse_config_h(fp[, vars])

   "config.h" スタイルのファイルを解析します。

   *fp* は "config.h" スタイルのファイルを指すファイルライクオブジェク
   トです。

   name/value ペアを格納した辞書を返します。第二引数にオプションの辞書
   が渡された場合、新しい辞書ではなくその辞書を利用し、ファイルから読
   み込んだ値で更新します。

sysconfig.get_config_h_filename()

   "pyconfig.h" のパスを返します。

sysconfig.get_makefile_filename()

   "Makefile" のパスを返します。


29.2.4. "sysconfig" をスクリプトとして使う
==========================================

Python の *-m* オプションを使えば、"sysconfig" をスクリプトとして使用
できます:

   $ python -m sysconfig
   Platform: "macosx-10.4-i386"
   Python version: "3.2"
   Current installation scheme: "posix_prefix"

   Paths:
           data = "/usr/local"
           include = "/Users/tarek/Dev/svn.python.org/py3k/Include"
           platinclude = "."
           platlib = "/usr/local/lib/python3.2/site-packages"
           platstdlib = "/usr/local/lib/python3.2"
           purelib = "/usr/local/lib/python3.2/site-packages"
           scripts = "/usr/local/bin"
           stdlib = "/usr/local/lib/python3.2"

   Variables:
           AC_APPLE_UNIVERSAL_BUILD = "0"
           AIX_GENUINE_CPLUSPLUS = "0"
           AR = "ar"
           ARFLAGS = "rc"
           ...

これは、"get_platform()"、"get_python_version()"、"get_path()" および
"get_config_vars()" が返す情報を標準出力に出力します。
