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 |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
scripts |
|
data |
|
nt_user¶
パス |
インストールディレクトリ |
|---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
scripts |
|
data |
|
osx_framework_user¶
パス |
インストールディレクトリ |
|---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
scripts |
|
data |
|
ホームスキーム¶
"home スキーム" の背後にある考え方は、Python モジュールを個人用のモジュール置き場でビルドし、維持するというものです。このスキームの名前は Unixの「ホーム」ディレクトリの概念からとりました。というのも、 Unixのユーザにとって、自分のホームディレクトリを /usr/ や /usr/local/ のようにレイアウトするのはよくあることだからです。とはいえ、このスキームはどのオペレーティングシステムのユーザでも使えます。
posix_home¶
パス |
インストールディレクトリ |
|---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
platinclude |
|
scripts |
|
data |
|
プレフィックススキーム¶
ある 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 |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
platinclude |
|
scripts |
|
data |
|
nt¶
パス |
インストールディレクトリ |
|---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
platinclude |
|
scripts |
|
data |
|
インストールパスの関数¶
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() が返す情報を標準出力に出力します。