3. Python を構成する¶
3.1. ビルド要件¶
CPython のビルドに必要な機能と最小バージョン:
C11 コンパイラ。 C11 オプション機能 は不要です。
Windows では、 Microsoft Visual Studio 2017 以降が必要です。
IEEE 754 浮動小数点数と 浮動小数点 Not-a-Number (NaN) のサポート。
スレッドのサポート。
OpenSSL 1.1.1 is the minimum possible version to build the
sslandhashlibextension modules against, but the series is end-of-life and no longer receives public security fixes. Use the latest patch release of a currently supported LTS release series (see the OpenSSL Roadmap), or the package provided by your operating system if available. Other libraries that offer an API compatible with OpenSSL 1.1.1 or later may work, but are not officially supported.SQLite 3.15.2 for the
sqlite3extension module.Tcl/Tk 8.5.12 for the
tkintermodule.Autoconf 2.71 and aclocal 1.16.5 are required to regenerate the
configurescript.
バージョン 3.1 で変更: Tcl/Tk version 8.3.1 is now required.
バージョン 3.5 で変更: On Windows, Visual Studio 2015 or later is now required. Tcl/Tk version 8.4 is now required.
バージョン 3.6 で変更: Selected C99 features are now required, like <stdint.h> and static
inline functions.
バージョン 3.7 で変更: Thread support and OpenSSL 1.0.2 are now required.
バージョン 3.10 で変更: OpenSSL 1.1.1 is now required. Require SQLite 3.7.15.
バージョン 3.11 で変更: C11 compiler, IEEE 754 and NaN support are now required.
On Windows, Visual Studio 2017 or later is required.
Tcl/Tk version 8.5.12 is now required for the tkinter module.
バージョン 3.13 で変更: Autoconf 2.71, aclocal 1.16.5 and SQLite 3.15.2 are now required.
PEP 7 「Style Guide for C Code」と PEP 11 「CPython platform support」も参照してください。
3.2. 生成されるファイル¶
ビルドの依存関係を減らすため、Python のソースコードには生成済みのファイルが複数含まれています。 生成済みファイルをすべて再生成するコマンドは次のとおりです。
make regen-all
make regen-stdlib-module-names
make regen-limited-abi
make regen-configure
Makefile.pre.in ファイルには、生成されるファイル、その入力、および再生成に使用するツールが記載されています。
regen-* という make ターゲットを検索してください。
3.2.1. 構成スクリプト¶
make regen-configure コマンドは、Tools/build/regen-configure.sh シェルスクリプトを使って aclocal.m4 ファイルと configure スクリプトを再生成します。
このシェルスクリプトは、ツールのバージョンを揃えて再現可能な出力を得るために Ubuntu コンテナを使用します。
コンテナの使用は必須ではなく、次のコマンドをローカルで実行することもできます。
autoreconf -ivf -Werror
The generated files can change depending on the exact autoconf-archive,
aclocal and pkg-config versions.
3.3. Configureオプション¶
次のコマンドを使用して、全ての configure スクリプトのオプションを表示できます:
./configure --help
Pythonのソース配布の中の Misc/SpecialBuilds.txt も参照してください。
3.3.1. 一般的なオプション¶
- --enable-loadable-sqlite-extensions¶
sqlite3モジュールの_sqlite拡張モジュールで、ロード可能な拡張機能をサポートします (デフォルトでは無効)。sqlite3モジュールのsqlite3.Connection.enable_load_extension()メソッドを参照してください。Added in version 3.6.
- --enable-big-digits=[15|30]¶
Python
intの桁の大きさをビット単位で定義します: 15ビットまたは30ビットです。デフォルトでは、桁の大きさは30です。
PYLONG_BITS_IN_DIGITを15または30に定義します。sys.int_info.bits_per_digitを参照してください。
- --with-suffix=SUFFIX¶
Python の実行ファイルの接尾辞を SUFFIX に設定します。
デフォルトの接尾辞は、 Windows と macOS では
.exe(python.exe実行ファイル)、 Emscripten node では.js、 Emscripten browser では.html、 WASI では.wasm、その他のプラットフォームでは空文字列になります (python実行ファイル)。バージョン 3.11 で変更: WASM プラットフォームのデフォルトの接尾辞は、
.js、.html、.wasmのいずれかです。
- --with-tzpath=<list of absolute paths separated by pathsep>¶
zoneinfo.TZPATHのデフォルトのタイムゾーン検索パスを選択します。zoneinfoモジュールの コンパイル時の構成 を参照してください。デフォルト:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfoos.pathsepパスセパレータを参照してください。Added in version 3.9.
- --without-decimal-contextvar¶
コルーチンローカルコンテキスト(デフォルト)ではなく、スレッドローカルコンテキストを使用して
_decimal拡張モジュールをビルドします。decimalモジュールを参照してください。decimal.HAVE_CONTEXTVARおよびcontextvarsモジュールを参照してください。Added in version 3.9.
- --with-dbmliborder=<list of backend names>¶
dbmモジュールの DB バックエンドをチェックする順序をオーバーライドします。有効な値は、バックエンド名をコロン(
:)で区切った文字列です:ndbm;gdbm;bdb。
- --without-c-locale-coercion¶
UTF-8 ベースのロケールへの C ロケールの強制を無効にします(デフォルトで有効)。
PY_COERCE_C_LOCALEマクロを定義しません。PYTHONCOERCECLOCALEおよび PEP 538 を参照してください。
- --without-freelists¶
Disable all freelists except the empty tuple singleton.
Added in version 3.11.
- --with-platlibdir=DIRNAME¶
Python のライブラリディレクトリ名(デフォルトは
lib)。Fedora と SuSE は64ビットプラットフォームで
lib64を使用します。sys.platlibdirを参照してください。Added in version 3.9.
- --with-wheel-pkg-dir=PATH¶
ensurepipモジュールが使用する wheel パッケージのディレクトリです(デフォルトはなし)。Linux ディストリビューションのパッケージングポリシーの中には、依存関係を同梱しないことを推奨するものがあります。 例えば、Fedora は wheel パッケージを
/usr/share/python-wheels/ディレクトリにインストールし、ensurepip._bundledパッケージはインストールしません。Added in version 3.10.
- --with-pkg-config=[check|yes|no]¶
configure がビルドの依存関係を検出するために pkg-config を使用するかどうかを設定します。
check(デフォルト): pkg-config はオプションです。yes: pkg-config は必須です。no: pkg-config が存在しても、 configure は使用しません。
Added in version 3.11.
- --enable-pystats¶
Python 内部のパフォーマンス統計の収集を有効にします。
デフォルトでは統計の収集は無効です。 Python 起動時に統計の収集を有効にするには、
python3 -X pystatsコマンドを使用するか、環境変数PYTHONSTATS=1を設定してください。統計の収集が有効で、統計がクリアされていなければ、Python の終了時に統計を出力します。
効果:
-X pystatsコマンドラインオプションを追加します。PYTHONSTATS環境変数を追加します。Py_STATSマクロを定義します。sysモジュールに関数を追加します:sys._stats_on(): 統計の収集を有効にします。sys._stats_off(): 統計の収集を無効にします。sys._stats_clear(): 統計をクリアします。sys._stats_dump(): 統計をファイルに出力し、統計をクリアします。
統計は、
/tmp/py_stats/(Unix) またはC:\temp\py_stats\(Windows) の任意の (おそらく一意な) ファイルに出力されます。 このディレクトリが存在しない場合、結果は標準エラー出力に出力されます。統計情報を読むには
Tools/scripts/summarize_stats.pyを使用してください。統計:
命令コード:
特殊化: 成功、失敗、ヒット、延期、ミス、特殊化解除、失敗の内訳;
実行回数;
命令コードのペアの実行回数。
呼び出し:
インライン化された Python 呼び出し;
PyEval 呼び出し;
プッシュされたフレーム;
作成されたフレームオブジェクト;
評価呼び出し: vector、generator、legacy、function VECTORCALL、build class、slot、function "ex"、API、method。
オブジェクト:
incref と decref;
インタープリタによる incref と decref;
割り当て: すべて、512 バイト、4 kiB、大容量;
解放;
フリーリストへの追加とフリーリストからの取得;
辞書の実体化と実体化の解除;
型キャッシュ;
最適化の試行;
作成された最適化トレースと実行された最適化トレース;
実行された uop。
ガベージコレクタ:
ガベージコレクション;
走査したオブジェクト;
回収したオブジェクト。
Added in version 3.11.
- --disable-gil¶
Enables experimental support for running Python without the global interpreter lock (GIL): free threading build.
Py_GIL_DISABLEDマクロを定義し、sys.abiflagsに"t"を追加します。詳しくは Free-threaded CPython を参照してください。
Added in version 3.13.
- --enable-experimental-jit=[no|yes|yes-off|interpreter]¶
Indicate how to integrate the JIT compiler.
no- build the interpreter without the JIT.yes- build the interpreter with the JIT.yes-off- build the interpreter with the JIT but disable it by default.interpreter- build the interpreter without the JIT, but with the tier 2 enabled interpreter.
By convention,
--enable-experimental-jitis a shorthand for--enable-experimental-jit=yes.注釈
JIT を有効にして CPython をビルドする場合は、システムに Python 3.11 以降がインストールされていることを確認してください。
Added in version 3.13.
- PKG_CONFIG¶
pkg-configユーティリティへのパス。
- PKG_CONFIG_LIBDIR¶
- PKG_CONFIG_PATH¶
pkg-configのオプション。
3.3.2. C コンパイラのオプション¶
- CC¶
C コンパイラのコマンド。
- CFLAGS¶
C コンパイラのフラグ。
- CPP¶
C プリプロセッサのコマンド。
- CPPFLAGS¶
C プリプロセッサのフラグ。 (
-Iinclude_dirなど)
3.3.3. リンカのオプション¶
- LDFLAGS¶
リンカのフラグ。 (
-Llibrary_directoryなど)
- LIBS¶
リンカに渡すライブラリ。 (
-llibraryなど)
- MACHDEP¶
マシン依存のライブラリファイルの名前。
3.3.4. サードパーティ依存関係のオプション¶
Added in version 3.11.
- BZIP2_CFLAGS¶
- CURSES_CFLAGS¶
- CURSES_LIBS¶
cursesモジュールで使用するlibncursesまたはlibncursesw用の C コンパイラとリンカのフラグ。pkg-configの設定をオーバーライドします。
- GDBM_CFLAGS¶
- GDBM_LIBS¶
gdbm用の C コンパイラとリンカのフラグ。
- LIBB2_CFLAGS¶
- LIBB2_LIBS¶
C compiler and linker flags for
libb2(BLAKE2), used byhashlibmodule, overridingpkg-config.
- LIBEDIT_CFLAGS¶
- LIBFFI_CFLAGS¶
- LIBMPDEC_CFLAGS¶
- LIBMPDEC_LIBS¶
decimalモジュールで使用するlibmpdec用の C コンパイラとリンカのフラグ。pkg-configの設定をオーバーライドします。注釈
--with-system-libmpdecを指定しない限り、これらの環境変数は効果がありません。
- LIBLZMA_CFLAGS¶
- LIBREADLINE_CFLAGS¶
- LIBSQLITE3_CFLAGS¶
- LIBUUID_CFLAGS¶
- PANEL_CFLAGS¶
- PANEL_LIBS¶
PANEL 用の C コンパイラとリンカのフラグ。
pkg-configの設定をオーバーライドします。curses.panelモジュールで使用するlibpanelまたはlibpanelw用の C コンパイラとリンカのフラグ。pkg-configの設定をオーバーライドします。
- TCLTK_CFLAGS¶
- TCLTK_LIBS¶
TCLTK 用の C コンパイラとリンカのフラグ。
pkg-configの設定をオーバーライドします。
- ZLIB_CFLAGS¶
3.3.5. WebAssembly オプション¶
- --with-emscripten-target=[browser|node]¶
Set build flavor for
wasm32-emscripten.browser(default): preload minimal stdlib, default MEMFS.node: NODERAWFS and pthread support.
Added in version 3.11.
- --enable-wasm-dynamic-linking¶
WASM のダイナミックリンクサポートをオンにします。
ダイナミックリンクにより
dlopenが使用可能になります。 デッドコードの除去が制限されることと、機能が追加されることにより、実行ファイルのサイズが大きくなります。Added in version 3.11.
- --enable-wasm-pthreads¶
WASM の pthreads サポートをオンにします。
Added in version 3.11.
3.3.6. インストールオプション¶
- --prefix=PREFIX¶
アーキテクチャに依存しないファイルを PREFIX にインストールします。Unix の場合、デフォルトは
/usr/localです。この値は、実行時に
sys.prefixを使って取得することができます。例えば、
--prefix="$HOME/.local/"を使用すると、自分のホームディレクトリに Python をインストールできます。
- --exec-prefix=EPREFIX¶
アーキテクチャ依存のファイルを EPREFIX にインストールします。デフォルトは
--prefixです。この値は、実行時に
sys.exec_prefixを使って取得することができます。
3.3.7. パフォーマンスに関するオプション¶
最良のパフォーマンスを得るには、--enable-optimizations --with-lto (PGO + LTO) を指定して Python を構成することを推奨します。
実験的な --enable-bolt フラグも、パフォーマンスの向上に使用できます。
- --enable-optimizations¶
PROFILE_TASKを使用して Profile Guided Optimization (PGO) を有効にします(デフォルトでは無効です)。Cコンパイラの Clang では、 PGO のために
llvm-profdataプログラムが必要です。macOS では、 GCC もこれを必要とします: GCC は macOS の Clang のエイリアスにすぎません。--enable-sharedと GCC を使用する場合は、libpython のセマンティックインターポジションも無効にします。 コンパイラとリンカのフラグに-fno-semantic-interpositionを追加します。注釈
ビルド中に、一部のソースファイルのプロファイルデータが利用できないというコンパイラの警告が表示されることがあります。 プロファイルデータの取得時にはコードの一部だけが実行されるため、この警告に問題はありません。 Clang でこの警告を無効にするには、
CFLAGSに-Wno-profile-instr-unprofiledを追加して明示的に抑制してください。Added in version 3.6.
バージョン 3.10 で変更: GCC で
-fno-semantic-interpositionを使用する。
- PROFILE_TASK¶
Makefile で使用する環境変数。 PGO 生成タスクに使用する Python のコマンドライン引数。
デフォルト:
-m test --pgo --timeout=$(TESTTIMEOUT)Added in version 3.8.
バージョン 3.13 で変更: タスクの失敗が通知されずに無視されることはなくなりました。
- --with-lto=[full|thin|no|yes]¶
どのビルドでもリンク時最適化 (LTO) を有効にします (デフォルトでは無効)。
C コンパイラの Clang で LTO を使用するには、
llvm-ar(macOS ではar) と、LTO に対応したリンカ (ld.goldまたはlld) が必要です。Added in version 3.6.
Added in version 3.11: ThinLTO 機能を使用するには、Clang で
--with-lto=thinを指定してください。バージョン 3.12 で変更: コンパイラがフラグを受け付ける場合、Clang では ThinLTO をデフォルトの最適化方針として使用します。
- --enable-bolt¶
リンク後のバイナリを最適化する BOLT の使用を有効にします (デフォルトでは無効)。
BOLT は LLVM プロジェクトの一部ですが、LLVM のバイナリ配布に必ず含まれているとは限りません。 このフラグを使用するには、
llvm-boltとmerge-fdataが利用可能である必要があります。BOLT はまだ比較的新しいプロジェクトであるため、現時点ではこのフラグを実験的なものと考えてください。 このツールは機械語を処理するため、処理が成功するかどうかは、ビルド環境、ほかの最適化用 configure 引数、CPU アーキテクチャの組み合わせに依存し、すべての組み合わせがサポートされているわけではありません。 LLVM 16 より前の BOLT は、状況によってクラッシュすることが知られています。 BOLT による最適化には LLVM 16 以降の使用を強く推奨します。
configure 変数
BOLT_INSTRUMENT_FLAGSとBOLT_APPLY_FLAGSを定義すると、llvm-bolt に渡すデフォルトの引数をオーバーライドできます。 前者はバイナリへの計測処理の挿入、後者はバイナリへの BOLT データの適用に使用します。Added in version 3.12.
- BOLT_APPLY_FLAGS¶
BOLT で最適化したバイナリ を作成するときに
llvm-boltに渡す引数。Added in version 3.12.
- BOLT_INSTRUMENT_FLAGS¶
バイナリに計測処理を挿入するときに
llvm-boltに渡す引数。Added in version 3.12.
- --with-computed-gotos¶
評価ループで計算型 goto を有効にします (対応するコンパイラではデフォルトで有効)。
- --without-mimalloc¶
高速な mimalloc アロケータを無効にします (デフォルトでは有効)。
PYTHONMALLOC環境変数も参照してください。
- --without-pymalloc¶
Python 専用のメモリアロケータ pymalloc を無効にします (デフォルトでは有効)。
PYTHONMALLOC環境変数も参照してください。
- --without-doc-strings¶
メモリ使用量を減らすため、静的なドキュメンテーション文字列を無効にします (デフォルトでは有効)。 Python で定義されたドキュメンテーション文字列には影響しません。
Don't define the
WITH_DOC_STRINGSmacro.PyDoc_STRVAR()マクロを参照してください。
- --enable-profiling¶
gprofによる C レベルのコードのプロファイリングを有効にします (デフォルトでは無効)。
- --with-strict-overflow¶
C コンパイラのフラグに
-fstrict-overflowを追加します (デフォルトでは代わりに-fno-strict-overflowを追加します)。
3.3.8. Python デバッグビルド¶
デバッグビルドは、 --with-pydebug 構成オプション付きでビルドされた Python です。
デバッグビルドの影響:
デフォルトですべての警告を表示します。
warningsモジュールのデフォルトの警告フィルタのリストが空になります。sys.abiflagsにdを追加します。sys.gettotalrefcount()関数を追加します。-X showrefcountコマンドラインオプションを追加します。パーサをデバッグするための
-dコマンドラインオプションとPYTHONDEBUG環境変数を追加します。__lltrace__変数のサポートを追加します。 この変数が定義されている場合、バイトコード評価ループの低レベルのトレースを有効にします。バッファオーバーフローやその他のメモリエラーを検出するために、メモリアロケータにデバッグフック を設定します。
Py_DEBUGとPy_REF_DEBUGマクロを定義します。実行時のチェックを追加します。 これは
#ifdef Py_DEBUGと#endifで囲まれたコードです。assert(...)と_PyObject_ASSERT(...)によるアサーションを有効にし、NDEBUGマクロを設定しません (--with-assertionsconfigure オプションも参照してください)。 実行時の主なチェックは次のとおりです:関数の引数が妥当かどうかのチェックを追加します。
未初期化のオブジェクトの使用を検出するため、Unicode オブジェクトと int オブジェクトの作成時に、そのメモリを特定のパターンで埋めます。
現在の例外をクリアまたは置換する可能性のある関数が、例外が発生している状態で呼び出されていないことを確認します。
メモリ解放関数が現在の例外を変更しないことをチェックします。
ガベージコレクタ (
gc.collect()関数) は、オブジェクトの整合性に関する基本的なチェックをいくつか実行します。Py_SAFE_DOWNCAST()マクロは、幅の広い型から狭い型へダウンキャストするときに、整数のアンダーフローとオーバーフローをチェックします。
Python 開発モード と --with-trace-refs configure オプションも参照してください。
バージョン 3.8 で変更: Release builds are now ABI compatible with debug builds: defining the
Py_DEBUG macro no longer implies the Py_TRACE_REFS macro (see the
--with-trace-refs option). However, debug builds still expose
more symbols than release builds and code built against a debug build is not
necessarily compatible with a release build.
3.3.9. デバッグオプション¶
- --with-pydebug¶
Python をデバッグモードでビルド します。
Py_DEBUGマクロを定義します (デフォルトでは無効)。
- --with-trace-refs¶
デバッグのために参照の追跡を有効にします (デフォルトでは無効)。
効果:
Py_TRACE_REFSマクロを定義します。sys.getobjects()関数を追加します。PYTHONDUMPREFS環境変数を追加します。
PYTHONDUMPREFS環境変数を使うと、Python の終了時にまだ生存しているオブジェクトとその参照カウントを出力できます。静的に割り当てられたオブジェクト は追跡しません。
Added in version 3.8.
バージョン 3.13 で変更: このビルドがリリースビルドおよび デバッグビルド と ABI 互換になりました。
- --with-assertions¶
C のアサーション
assert(...);と_PyObject_ASSERT(...);を有効にしてビルドします (デフォルトでは無効)。設定した場合、
OPTコンパイラ変数にNDEBUGマクロを定義しません。アサーションも有効にする
--with-pydebugオプション (デバッグビルド) も参照してください。Added in version 3.6.
- --with-valgrind¶
Valgrind のサポートを有効にします (デフォルトでは無効)。
- --with-dtrace¶
DTrace のサポートを有効にします (デフォルトでは無効)。
DTrace と SystemTap による CPython の計測 を参照してください。
Added in version 3.6.
- --with-address-sanitizer¶
Enable AddressSanitizer memory error detector,
asan(default is no). To improve ASan detection capabilities you may also want to combine this with--without-pymallocto disable the specialized small-object allocator whose allocations are not tracked by ASan.Added in version 3.6.
- --with-memory-sanitizer¶
メモリ割り当てエラー検出ツール MemorySanitizer (
msan) を有効にします (デフォルトでは無効)。Added in version 3.6.
- --with-undefined-behavior-sanitizer¶
未定義動作検出ツール UndefinedBehaviorSanitizer (
ubsan) を有効にします (デフォルトでは無効)。Added in version 3.6.
- --with-thread-sanitizer¶
データ競合検出ツール ThreadSanitizer (
tsan) を有効にします (デフォルトでは無効)。Added in version 3.13.
3.3.10. リンカのオプション¶
Python の共有ライブラリ
libpythonのビルドを有効にします (デフォルトでは無効)。
- --without-static-libpython¶
libpythonMAJOR.MINOR.aをビルドせず、python.oをインストールしません (デフォルトではビルドされ、有効です)。Added in version 3.10.
3.3.11. ライブラリのオプション¶
- --with-libs='lib1 ...'¶
追加のライブラリにリンクします (デフォルトでは無効)。
- --with-system-expat¶
インストール済みの
expatライブラリを使用してpyexpatモジュールをビルドします (デフォルトでは無効)。
- --with-system-libmpdec¶
インストール済みの
mpdecimalライブラリを使用して_decimal拡張モジュールをビルドします (デフォルトでは有効)。decimalモジュールを参照してください。Added in version 3.3.
バージョン 3.13 で変更: デフォルトでインストール済みの
mpdecimalライブラリを使用するようになりました。Deprecated since version 3.13, will be removed in version 3.16: A copy of the
mpdecimallibrary sources will no longer be distributed with Python 3.16.参考
- --with-readline=readline|editline¶
readlineモジュールのバックエンドライブラリを指定します。readline: バックエンドに readline を使用します。
editline: バックエンドに editline を使用します。
Added in version 3.10.
- --without-readline¶
readlineモジュールをビルドしません (デフォルトではビルドします)。HAVE_LIBREADLINEマクロを定義しません。Added in version 3.10.
- --with-libm=STRING¶
数学ライブラリ
libmを STRING に変更します (デフォルトはシステムに依存)。
- --with-libc=STRING¶
C ライブラリ
libcを STRING に変更します (デフォルトはシステムに依存)。
- --with-openssl=DIR¶
OpenSSL ディレクトリのルート。
Added in version 3.7.
- --with-openssl-rpath=[no|auto|DIR]¶
OpenSSL ライブラリの実行時ライブラリディレクトリ (rpath) を設定します:
no(デフォルト): rpath を設定しません;auto:--with-opensslとpkg-configから rpath を自動検出します;DIR: rpath を明示的に設定します。
Added in version 3.10.
3.3.12. セキュリティのオプション¶
- --with-hash-algorithm=[fnv|siphash13|siphash24]¶
Python/pyhash.cで使用するハッシュアルゴリズムを選択します:siphash13(デフォルト);siphash24;fnv。
Added in version 3.4.
Added in version 3.11:
siphash13が追加され、新たなデフォルトになりました。
- --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2¶
組み込みのハッシュモジュール:
md5;sha1;sha256;sha512;sha3(shake を含む);blake2.
Added in version 3.9.
3.3.13. macOS のオプション¶
Mac/README.rst を参照。
- --enable-universalsdk¶
- --enable-universalsdk=SDKDIR¶
ユニバーサルバイナリのビルドを作成します (デフォルトでは無効)。 SDKDIR は、ビルドに使用する macOS SDK を指定します。
- --enable-framework¶
- --enable-framework=INSTALLDIR¶
従来の Unix 形式でのインストールに代えて、Python.framework を作成します (デフォルトでは無効)。 オプションの INSTALLDIR はインストール先のパスを指定します。
- --with-universal-archs=ARCH¶
作成するユニバーサルバイナリの種類を指定します。このオプションは、
--enable-universalsdkが指定された場合のみ有効です。オプション:
universal2(x86-64 と arm64);32-bit(PPC と i386);64-bit(PPC64 と x86-64);3-way(i386、PPC、x86-64);intel(i386 と x86-64);intel-32(i386);intel-64(x86-64);all(PPC、i386、PPC64、x86-64)。
この構成項目の値は、macOS のユニバーサルバイナリ wheel で使用する識別子と同じでは ない ことに注意してください。 詳しくは、Python Packaging User Guide の macOS で使用するパッケージングのプラットフォーム互換性タグ を参照してください。
- --with-framework-name=FRAMEWORK¶
macOS の Python フレームワークの名前を指定します。
--enable-frameworkが指定された場合のみ有効です (デフォルトではPython) 。
- --with-app-store-compliance¶
- --with-app-store-compliance=PATCH-FILE¶
Python 標準ライブラリは、 macOS と iOS の App Store による配布用に送信された場合に、自動検査ツールのエラーを発生させることが知られている文字列を含んでいます。このオプションを有効にした場合、 App Store コンプライアンスに合わせて修正することが知られているパッチのリストを適用します。カスタムのパッチファイルを指定することもできます。このオプションはデフォルトでは無効になっています。
Added in version 3.13.
3.3.14. iOS のオプション¶
iOS/README.rst を参照。
- --enable-framework=INSTALLDIR¶
Python.framework を作成します。 macOS とは違い、インストールパスを指定する INSTALLDIR 引数は必須です。
- --with-framework-name=FRAMEWORK¶
フレームワークの名前を指定します (デフォルト:
Python) 。
3.3.15. クロスコンパイルのオプション¶
クロスコンパイル (クロスビルドとも呼ばれます) を使用すると、異なる CPU アーキテクチャやプラットフォーム向けの Python をビルドできます。 クロスコンパイルには、ビルドプラットフォーム用の Python インタープリタが必要です。 ビルドに使用する Python のバージョンは、クロスコンパイルするホスト用 Python のバージョンと一致していなければなりません。
- --build=BUILD¶
BUILD でビルドするための設定です。通常は、 config.guess により推測されます。
- --host=HOST¶
HOST (ターゲットプラットフォーム) で動作するプログラムをビルドするためのクロスコンパイル。
- --with-build-python=path/to/python¶
クロスコンパイルのビルド時に使用する
pythonバイナリへのパス。Added in version 3.11.
- CONFIG_SITE=file¶
構成をオーバーライドするファイルを指す環境変数。
config.site ファイルの例:
# config.site-aarch64 ac_cv_buggy_getaddrinfo=no ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no
- HOSTRUNNER¶
クロスコンパイル用にホストプラットフォームの CPython を実行するプログラム。
Added in version 3.11.
クロスコンパイルの例:
CONFIG_SITE=config.site-aarch64 ../configure \
--build=x86_64-pc-linux-gnu \
--host=aarch64-unknown-linux-gnu \
--with-build-python=../x86_64/python
3.4. Python ビルドシステム¶
3.4.1. ビルドシステムの主要なファイル¶
configure.ac=>configure;Makefile.pre.in=>Makefile(configureにより作成されます);pyconfig.h(configureにより作成されます);Modules/Setup:Module/makesetupシェルスクリプトを使用して Makefile がビルドする C 拡張。
3.4.2. 主要なビルドステップ¶
C ファイル (
.c) をオブジェクトファイル (.o) にビルドします。オブジェクトファイルから静的な
libpythonライブラリ (.a) を作成します。python.oと静的なlibpythonライブラリをリンクして、最終的なpythonプログラムを作成します。Makefile によって C 拡張をビルドします (
Modules/Setupを参照)。
3.4.3. 主な Makefile ターゲット¶
3.4.3.1. make¶
コードの一部を編集した後や、上流の変更を取り込んでチェックアウトを更新した後に再ビルドする場合、たいていは make を実行するだけで済みます。
Make の動作に従い、Makefile で最初に定義されたターゲットであるデフォルトのターゲットがビルドされます。
慣例として (CPython プロジェクトでも)、通常は all がそのターゲットです。
configure スクリプトは autoconf 変数 @DEF_MAKE_ALL_RULE@ を展開して、make all がビルドするターゲットを正確に指定します。
選択肢は次の三つです:
profile-opt(--enable-optimizationsで構成した場合)build_wasm(configured with--with-emscripten-target)build_all(ほかの二つを明示的に使用せずに構成した場合)
Make は、直近のソースファイルの変更に応じて、古くなったと判断したターゲット (オブジェクトファイルと実行ファイル) を再ビルドし、必要であれば configure も再実行します。
ただし、ソースとターゲットの依存関係は多く、手作業で管理されているため、Make が再ビルドの必要なターゲットをすべて正しく検出するための情報を持っていないことがあります。
再ビルドされなかったターゲットによっては、さまざまな問題が発生する可能性があります。
ほかに原因の説明がつかないビルドやテストの問題がある場合は、make clean && make を実行すると、ビルド時間は長くなりますが、依存関係の問題の大半を回避できるはずです。
3.4.3.2. make platform¶
python プログラムをビルドしますが、標準ライブラリの拡張モジュールはビルドしません。
ビルドプラットフォームの詳細を表す 1 行 (例えば macosx-14.3-arm64-3.12 や linux-x86_64-3.13) を含む、platform という名前のファイルを生成します。
3.4.3.3. make profile-opt¶
プロファイルに基づく最適化 (PGO) を使用して Python をビルドします。
configure の --enable-optimizations オプションを使用すると、このターゲットを make コマンド (make all または単に make) のデフォルトにできます。
3.4.3.4. make clean¶
ビルドしたファイルを削除します。
3.4.3.5. make distclean¶
make clean の処理に加え、configure スクリプトが作成したファイルを削除します。
再びビルドする前に、configure を実行する必要があります。 [1]
3.4.3.6. make install¶
all ターゲットをビルドし、Python をインストールします。
3.4.3.7. make test¶
Build the all target and run the Python test suite with the
--fast-ci option. Variables:
TESTOPTS: regrtest の追加のコマンドラインオプション。TESTPYTHONOPTS: Python の追加のコマンドラインオプション。TESTTIMEOUT: タイムアウトの秒数 (デフォルト: 10 分)。
3.4.3.8. make buildbottest¶
make test と似ていますが、--fast-ci オプションの代わりに --slow-ci オプションを使用し、デフォルトのタイムアウトを 20 分にします。
3.4.3.9. make regen-all¶
生成済みファイルの (ほぼ) すべてを再生成します。
これには、バイトコードのケースやパーサ生成用ファイルなどが含まれます。
残りの 生成済みファイル については、make regen-stdlib-module-names と autoconf を別途実行する必要があります。
3.4.4. C 拡張¶
sys モジュールのように、組み込みモジュールとしてビルドする C 拡張があります。
これらは Py_BUILD_CORE_BUILTIN マクロを定義してビルドします。
組み込みモジュールには __file__ 属性がありません:
>>> import sys
>>> sys
<module 'sys' (built-in)>
>>> sys.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'sys' has no attribute '__file__'
_asyncio モジュールのように、動的ライブラリとしてビルドする C 拡張もあります。
これらは Py_BUILD_CORE_MODULE マクロを定義してビルドします。
Linux x86-64 での例:
>>> import _asyncio
>>> _asyncio
<module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>
>>> _asyncio.__file__
'/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'
Modules/Setup は、C 拡張をビルドする Makefile ターゲットの生成に使用します。
ファイルの先頭では、C 拡張を組み込みモジュールとしてビルドします。
*shared* マーカーの後で定義した拡張は、動的ライブラリとしてビルドします。
The PyAPI_FUNC(), PyAPI_DATA() and
PyMODINIT_FUNC macros of Include/exports.h are defined
differently depending if the Py_BUILD_CORE_MODULE macro is defined:
Use
Py_EXPORTED_SYMBOLif thePy_BUILD_CORE_MODULEis definedUse
Py_IMPORTED_SYMBOLotherwise.
共有ライブラリとしてビルドする C 拡張に誤って Py_BUILD_CORE_BUILTIN マクロを使用すると、PyInit_xxx() 関数がエクスポートされず、インポート時に ImportError が発生します。
3.5. コンパイラとリンカのフラグ¶
./configure スクリプトと環境変数によって設定され、Makefile で使用されるオプション。
3.5.1. プリプロセッサのフラグ¶
- CPPFLAGS¶
(Objective) C/C++ プリプロセッサのフラグ。 例えば、標準以外のディレクトリ include_dir にヘッダーファイルがある場合の
-Iinclude_dir。Both
CPPFLAGSandLDFLAGSneed to contain the shell's value to be able to build extension modules using the directories specified in the environment variables.
- BASECPPFLAGS¶
Added in version 3.4.
- PY_CPPFLAGS¶
インタープリタのオブジェクトファイルをビルドするために追加するプリプロセッサのフラグ。
デフォルト:
$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)。Added in version 3.2.
3.5.2. コンパイラのフラグ¶
- CC¶
C コンパイラのコマンド。
例:
gcc -pthread。
- CXX¶
C++ コンパイラのコマンド。
例:
g++ -pthread。
- CFLAGS¶
C コンパイラのフラグ。
- CFLAGS_NODIST¶
CFLAGS_NODISTは、インタープリタと標準ライブラリの C 拡張のビルドに使用します。 Python のインストール後にCFLAGSに 含めるべきでない コンパイラフラグには、この変数を使用してください (gh-65320)。特に、
CFLAGSには次のものを含めないようにしてください:コンパイラフラグ
-I(インクルードファイルの検索パスの設定用)。-Iフラグは左から右へ処理されるため、CFLAGSにあるフラグは、ユーザーやパッケージが指定する-Iフラグよりも優先されてしまいます。hardening flags such as
-Werrorbecause distributions cannot control whether packages installed by users conform to such heightened standards.
Added in version 3.5.
- COMPILEALL_OPTS¶
make installで PYC ファイルをビルドするときに、compileallのコマンドラインに渡すオプション。 デフォルト:-j0。Added in version 3.12.
- EXTRA_CFLAGS¶
追加の C コンパイラのフラグ。
- CONFIGURE_CFLAGS_NODIST¶
./configureスクリプトに渡されたCFLAGS_NODIST変数の値。Added in version 3.5.
- BASECFLAGS¶
基本のコンパイラフラグ。
- OPT¶
最適化フラグ。
- CFLAGS_ALIASING¶
Python/dtoa.cのコンパイルに使用する、厳密なエイリアシングまたは非厳密なエイリアシングのフラグ。Added in version 3.7.
- CCSHARED¶
共有ライブラリのビルドに使用するコンパイラフラグ。
例えば、Linux と BSD では
-fPICを使用します。
- CFLAGSFORSHARED¶
インタープリタのオブジェクトファイルをビルドするために追加する C フラグ。
デフォルト:
--enable-sharedを使用する場合は$(CCSHARED)、それ以外の場合は空文字列。
- PY_CFLAGS¶
デフォルト:
$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)。
- PY_CFLAGS_NODIST¶
デフォルト:
$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal。Added in version 3.5.
- PY_STDMODULE_CFLAGS¶
インタープリタのオブジェクトファイルのビルドに使用する C フラグ。
デフォルト:
$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)。Added in version 3.7.
- PY_CORE_CFLAGS¶
デフォルト:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE。Added in version 3.2.
- PY_BUILTIN_MODULE_CFLAGS¶
posixモジュールのように、標準ライブラリの拡張モジュールを組み込みモジュールとしてビルドするためのコンパイラフラグ。デフォルト:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN。Added in version 3.8.
- PURIFY¶
Purify のコマンド。 Purify はメモリデバッガプログラムです。
デフォルト: 空文字列 (使用しません)。
3.5.3. リンカのフラグ¶
- LINKCC¶
pythonや_testembedのようなプログラムをビルドするためのリンカコマンド。デフォルト:
$(PURIFY) $(CC)。
- CONFIGURE_LDFLAGS¶
./configureスクリプトに渡されたLDFLAGS変数の値。CFLAGSやLDFLAGSなどへの代入は避けてください。 そうすることで、ユーザーはあらかじめ設定された値を上書きせずに、コマンドラインでこれらの変数の値に追加できます。Added in version 3.2.
- LDFLAGS_NODIST¶
LDFLAGS_NODISTはCFLAGS_NODISTと同じように使用します。 Python のインストール後にLDFLAGSに 含めるべきでない リンカフラグには、この変数を使用してください (gh-65320)。特に、
LDFLAGSには次のものを含めないようにしてください:コンパイラフラグ
-L(ライブラリの検索パスの設定用)。-Lフラグは左から右へ処理されるため、LDFLAGSにあるフラグは、ユーザーやパッケージが指定する-Lフラグよりも優先されてしまいます。
- CONFIGURE_LDFLAGS_NODIST¶
./configureスクリプトに渡されたLDFLAGS_NODIST変数の値。Added in version 3.8.
- LDFLAGS¶
リンカのフラグ。 例えば、標準以外のディレクトリ lib_dir にライブラリがある場合の
-Llib_dir。Both
CPPFLAGSandLDFLAGSneed to contain the shell's value to be able to build extension modules using the directories specified in the environment variables.
- LIBS¶
Python 実行ファイルのリンク時に、ライブラリをリンカに渡すためのリンカフラグ。
例:
-lrt。
- LDSHARED¶
共有ライブラリをビルドするコマンド。
デフォルト:
@LDSHARED@ $(PY_LDFLAGS)。
- BLDSHARED¶
libpython共有ライブラリをビルドするコマンド。デフォルト:
@BLDSHARED@ $(PY_CORE_LDFLAGS)。
- PY_LDFLAGS¶
デフォルト:
$(CONFIGURE_LDFLAGS) $(LDFLAGS)。
- PY_LDFLAGS_NODIST¶
デフォルト:
$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)。Added in version 3.8.
- PY_CORE_LDFLAGS¶
インタープリタのオブジェクトファイルのビルドに使用するリンカフラグ。
Added in version 3.8.
脚注