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

バージョン 3.2 で追加.

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

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

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


構成変数
========

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++']


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

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

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

Python currently supports six schemes:

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

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

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

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

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

* *osx_framework_user* オプションが利用された場合の、macOS 用のスキー
  ムです。

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

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

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

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

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

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

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

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

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

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

sysconfig.get_scheme_names()

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

sysconfig.get_default_scheme()

   Return the default scheme name for the current platform.

   バージョン 3.10 で追加: This function was previously named
   "_get_default_scheme()" and considered an implementation detail.

sysconfig.get_preferred_scheme(key)

   Return a preferred scheme name for an installation layout specified
   by *key*.

   *key* must be either ""prefix"", ""home"", or ""user"".

   The return value is a scheme name listed in "get_scheme_names()".
   It can be passed to "sysconfig" functions that take a *scheme*
   argument, such as "get_paths()".

   バージョン 3.10 で追加.

sysconfig._get_preferred_schemes()

   Return a dict containing preferred scheme names on the current
   platform. Python implementers and redistributors may add their
   preferred schemes to the "_INSTALL_SCHEMES" module-level global
   value, and modify this function to return those scheme names, to
   e.g. provide different schemes for system and language package
   managers to use, so packages installed by either do not mix with
   those by the other.

   End users should not use this function, but "get_default_scheme()"
   and "get_preferred_scheme()" instead.

   バージョン 3.10 で追加.

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* が見つからない場合、"KeyError" を送出します。

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

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

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

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

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

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


その他の関数
============

sysconfig.get_python_version()

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

sysconfig.get_platform()

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

   これはプラットフォーム依存のビルドディレクトリやプラットフォーム依
   存の配布物を区別するために使われます。 典型的には、('os.uname()' の
   ように) OSの名前とバージョン、アーキテクチャを含みますが、厳密には
   OSに依存します。 例えば Linux ではカーネルのバージョンはそれほど重
   要ではありません。

   返される値の例:

   * linux-i586

   * linux-alpha (?)

   * solaris-2.6-sun4u

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

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

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

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

   * 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" のパスを返します。


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