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: 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 に従ってインストールパスを返します。

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 では以下のどれかを返します:

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