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

バージョン 3.2 で追加.

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


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

構成変数

Python の配布物は、Python 自体のバイナリや、distutils によってコンパイルされる外部の C 拡張をビルドするために必要な、Makefilepyconfig.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: scheme for POSIX platforms like Linux or macOS. This is the default scheme used when Python or a component is installed.

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

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

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

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

  • osx_framework_user: scheme for macOS, when the user option is used.

各スキームは、ユニークな識別子を持ったいくつかのパスの集合から成っています。現在 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 に従ってインストールパスを返します。

nameget_path_names() が返すリストに含まれる値でなければなりません。

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

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

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

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

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

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 can return:

  • 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 スタイルのファイルを解析します。

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