# 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()` が返す情報を標準出力に出力します。