sysconfig --- Python の構成情報へのアクセスを提供する

Added in version 3.2.

ソースコード: Lib/sysconfig


sysconfig モジュールは、インストールパスの一覧や現在のプラットフォームに関する構成変数など、Python の構成情報へのアクセスを提供します。

構成変数

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

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

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

sysconfig.get_config_vars(*args)

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

引数がある場合は、各引数を構成変数の辞書で検索して得た値のリストを返します。

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

sysconfig.get_config_var(name)

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 に格納されています。 パッケージインストーラーは、ファイルのコピー先を決めるためにスキームを使います。

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

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

  • posix_home: home オプションを使う場合の POSIX プラットフォーム用スキームです。 指定されたホームプレフィックス配下のパスを定義します。

  • posix_user: user オプションを使う場合の POSIX プラットフォーム用スキームです。 ユーザーのホームディレクトリ (site.USER_BASE) 配下のパスを定義します。

  • posix_venv: POSIX プラットフォームの Python 仮想環境 用スキームです。 デフォルトでは posix_prefix と同じです。

  • nt: Windows 用のスキームです。 Python やコンポーネントをインストールするときに使うデフォルトのスキームです。

  • nt_user: user オプションを使う場合の Windows 用スキームです。

  • nt_venv: Windows の Python 仮想環境 用スキームです。 デフォルトでは nt と同じです。

  • venv: Python が動作するプラットフォームに応じて、posix_venv または nt_venv の値を使うスキームです。

  • osx_framework_user: user オプションを使う場合の macOS 用スキームです。

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

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

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

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

  • purelib: サイト固有で、プラットフォームに依存しないファイル (純粋な Python) のためのディレクトリです。

  • include: Python C API のプラットフォーム非依存のヘッダーファイル用ディレクトリです。

  • platinclude: Python C API のプラットフォーム依存のヘッダーファイル用ディレクトリです。

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

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

ユーザースキーム

このスキームは、グローバルな site-packages ディレクトリへの書き込み権限がないユーザーや、そこへインストールしたくないユーザーにとって、最も便利な方法になるように設計されています。

ファイルは site.USER_BASE (以下では userbase と表記) のサブディレクトリにインストールされます。 このスキームでは、純粋な Python のモジュールと拡張モジュールを同じ場所 (site.USER_SITE としても知られています) にインストールします。

posix_user

パス

インストールディレクトリ

stdlib

userbase/lib/pythonX.Y

platstdlib

userbase/lib/pythonX.Y

platlib

userbase/lib/pythonX.Y/site-packages

purelib

userbase/lib/pythonX.Y/site-packages

include

userbase/include/pythonX.Y

scripts

userbase/bin

data

userbase

nt_user

パス

インストールディレクトリ

stdlib

userbase\PythonXY

platstdlib

userbase\PythonXY

platlib

userbase\PythonXY\site-packages

purelib

userbase\PythonXY\site-packages

include

userbase\PythonXY\Include

scripts

userbase\PythonXY\Scripts

data

userbase

osx_framework_user

パス

インストールディレクトリ

stdlib

userbase/lib/python

platstdlib

userbase/lib/python

platlib

userbase/lib/python/site-packages

purelib

userbase/lib/python/site-packages

include

userbase/include/pythonX.Y

scripts

userbase/bin

data

userbase

ホームスキーム

"home スキーム" の背後にある考え方は、Python モジュールを個人用のモジュール置き場でビルドし、維持するというものです。このスキームの名前は Unixの「ホーム」ディレクトリの概念からとりました。というのも、 Unixのユーザにとって、自分のホームディレクトリを /usr/ や /usr/local/ のようにレイアウトするのはよくあることだからです。とはいえ、このスキームはどのオペレーティングシステムのユーザでも使えます。

posix_home

パス

インストールディレクトリ

stdlib

home/lib/python

platstdlib

home/lib/python

platlib

home/lib/python

purelib

home/lib/python

include

home/include/python

platinclude

home/include/python

scripts

home/bin

data

home

プレフィックススキーム

ある Python 環境を使ってビルドやインストール (setup スクリプトの実行) を行いながら、別の Python 環境のサードパーティーモジュール用ディレクトリ (またはそれに似た構成のディレクトリ) にモジュールをインストールしたい場合、プレフィックススキームが便利です。 少し変わった使い方に思えるかもしれませんが、その通りです。 そのため、ユーザースキームとホームスキームを先に説明しました。 それでも、プレフィックススキームが役立つ場面は少なくとも 2 つあります。

まず、多くの Linux ディストリビューションは、従来の /usr/local ではなく /usr に Python を配置します。 この場合の Python はローカルに追加したものではなく「システム」の一部なので、これはまったく適切です。 ただし、Python モジュールをソースからインストールする場合は、/usr/lib/python2.X ではなく /usr/local/lib/python2.X に配置したいでしょう。

もう 1 つは、リモートディレクトリへの書き込み時と読み取り時で、使う名前が異なるネットワークファイルシステムの場合です。 例えば、/usr/local/bin/python としてアクセスする Python インタープリタが /usr/local/lib/python2.X でモジュールを検索しても、 そのモジュールのインストール先には /mnt/@server/export/lib/python2.X などを指定する必要がある場合です。

posix_prefix

パス

インストールディレクトリ

stdlib

prefix/lib/pythonX.Y

platstdlib

prefix/lib/pythonX.Y

platlib

prefix/lib/pythonX.Y/site-packages

purelib

prefix/lib/pythonX.Y/site-packages

include

prefix/include/pythonX.Y

platinclude

prefix/include/pythonX.Y

scripts

prefix/bin

data

prefix

nt

パス

インストールディレクトリ

stdlib

prefix\Lib

platstdlib

prefix\Lib

platlib

prefix\Lib\site-packages

purelib

prefix\Lib\site-packages

include

prefix\Include

platinclude

prefix\Include

scripts

prefix\Scripts

data

prefix

インストールパスの関数

sysconfig は、これらのインストールパスを求める関数を提供します。

sysconfig.get_scheme_names()

sysconfig が現在サポートするすべてのスキームを含むタプルを返します。

sysconfig.get_default_scheme()

現在のプラットフォームのデフォルトのスキーム名を返します。

Added in version 3.10: 以前、この関数は _get_default_scheme() という名前で、実装の詳細とされていました。

バージョン 3.11 で変更: Python を仮想環境で実行している場合、venv スキームを返すようになりました。

sysconfig.get_preferred_scheme(key)

key で指定したインストール構成に適したスキーム名を返します。

key は "prefix"、"home"、"user" のいずれかでなければなりません。

戻り値は get_scheme_names() に含まれるスキーム名です。 get_paths() など、scheme 引数を受け取る sysconfig の関数に渡せます。

Added in version 3.10.

バージョン 3.11 で変更: Python を仮想環境で実行していて key="prefix" の場合、venv スキームを返すようになりました。

sysconfig._get_preferred_schemes()

現在のプラットフォームに適したスキーム名を格納した辞書を返します。 Python の実装者や再配布者は、モジュールレベルのグローバル値 _INSTALL_SCHEMES に独自のスキームを追加し、この関数がそれらの名前を返すように変更できます。 例えば、システムのパッケージマネージャーと言語のパッケージマネージャーに別々のスキームを用意し、一方がインストールしたパッケージと他方のパッケージが混在しないようにできます。

エンドユーザーはこの関数ではなく、get_default_scheme() と get_preferred_scheme() を使ってください。

Added in version 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 の名前、バージョン、アーキテクチャ (os.uname() で得られるもの) を含みますが、具体的にどの情報が含まれるかは OS によって異なります。 例えば Linux では、カーネルのバージョンは特に重要ではありません。

返される値の例:

  • linux-x86_64

  • linux-aarch64

  • solaris-2.6-sun4u

Windows:

  • win-amd64 (AMD64、別名 x86_64、Intel64、EM64T 上の 64 ビット Windows)

  • win-arm64 (ARM64、別名 AArch64 上の 64 ビット Windows)

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

POSIX ベースの OS:

  • linux-x86_64

  • macosx-15.5-arm64

  • macosx-26.0-universal2 (Apple Silicon または Intel 上の macOS)

  • android-24-arm64_v8a

その他の非 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 のパスを返します。

コマンドラインでの使用

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