sysconfig --- Python の構成情報へのアクセスを提供する¶
Added in version 3.2.
ソースコード: Lib/sysconfig
sysconfig モジュールは、インストールパスのリストや、現在のプラットフォームに関連した構成などの、Python の構成情報 (configuration information) へのアクセスを提供します。
構成変数¶
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 uses an installation scheme that differs depending on the platform and on
the installation options. These schemes are stored in sysconfig under
unique identifiers based on the value returned by os.name.
The schemes are used by package installers to determine where to copy files to.
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 provides some functions to determine these installation paths.
- 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"のいずれかでなければなりません。The return value is a scheme name listed in
get_scheme_names(). It can be passed tosysconfigfunctions that take a scheme argument, such asget_paths().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 では、カーネルのバージョンは特に重要ではありません。返される値の例:
Windows:
win-amd64 (AMD64、別名 x86_64、Intel64、EM64T 上の 64 ビット Windows)
win-arm64 (ARM64、別名 AArch64 上の 64 ビット Windows)
win32 (その他すべて - 具体的には sys.platform が返す値)
POSIX based OS:
linux-x86_64
macosx-15.5-arm64
macosx-26.0-universal2 (macOS on Apple Silicon or Intel)
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() が返す情報を標準出力に出力します。