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 ssl and hashlib extension 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 sqlite3 extension module.

  • Tcl/Tk 8.5.12 for the tkinter module.

  • libmpdec 2.5.0 for the decimal module.

  • Autoconf 2.71 and aclocal 1.16.5 are required to regenerate the configure script.

バージョン 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.

--disable-ipv6

IPv6サポートを無効にします(サポートされている場合はデフォルトで有効)、 socket モジュールを参照してください。

--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/zoneinfo

os.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-jit is 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
BZIP2_LIBS

bz2 モジュールで使用する libbz2 に Python をリンクするための C コンパイラとリンカのフラグ。 pkg-config の設定をオーバーライドします。

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 by hashlib module, overriding pkg-config.

LIBEDIT_CFLAGS
LIBEDIT_LIBS

readline モジュールで使用する libedit 用の C コンパイラとリンカのフラグ。 pkg-config の設定をオーバーライドします。

LIBFFI_CFLAGS
LIBFFI_LIBS

ctypes モジュールで使用する libffi 用の C コンパイラとリンカのフラグ。 pkg-config の設定をオーバーライドします。

LIBMPDEC_CFLAGS
LIBMPDEC_LIBS

decimal モジュールで使用する libmpdec 用の C コンパイラとリンカのフラグ。 pkg-config の設定をオーバーライドします。

注釈

--with-system-libmpdec を指定しない限り、これらの環境変数は効果がありません。

LIBLZMA_CFLAGS
LIBLZMA_LIBS

lzma モジュールで使用する liblzma 用の C コンパイラとリンカのフラグ。 pkg-config の設定をオーバーライドします。

LIBREADLINE_CFLAGS
LIBREADLINE_LIBS

readline モジュールで使用する libreadline 用の C コンパイラとリンカのフラグ。 pkg-config の設定をオーバーライドします。

LIBSQLITE3_CFLAGS
LIBSQLITE3_LIBS

sqlite3 モジュールで使用する libsqlite3 用の C コンパイラとリンカのフラグ。 pkg-config の設定をオーバーライドします。

LIBUUID_CFLAGS
LIBUUID_LIBS

uuid モジュールで使用する libuuid 用の C コンパイラとリンカのフラグ。 pkg-config の設定をオーバーライドします。

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
ZLIB_LIBS

gzip モジュールで使用する libzlib 用の C コンパイラとリンカのフラグ。 pkg-config の設定をオーバーライドします。

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 を使って取得することができます。

--disable-test-modules

test パッケージや _testcapi 拡張モジュール(デフォルトでビルド、インストールされます)のようなテストモジュールをビルド、インストールしないようにします。

Added in version 3.10.

--with-ensurepip=[upgrade|install|no]

Python のインストール時に実行される ensurepip コマンドを選択します:

  • upgrade (デフォルト): python -m ensurepip --altinstall --upgrade コマンドを実行します。

  • install: python -m ensurepip --altinstall コマンドを実行します。

  • no: ensurepip を実行しない;

Added in version 3.6.

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_STRINGS macro.

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-assertions configure オプションも参照してください)。 実行時の主なチェックは次のとおりです:

    • 関数の引数が妥当かどうかのチェックを追加します。

    • 未初期化のオブジェクトの使用を検出するため、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

デバッグのために参照の追跡を有効にします (デフォルトでは無効)。

効果:

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-pymalloc to 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. リンカのオプション

--enable-shared

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 mpdecimal library 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.

--with-ssl-default-suites=[python|openssl|STRING]

OpenSSL のデフォルトの暗号スイート文字列をオーバーライドします:

  • python (デフォルト): Python が推奨する選択を使用します;

  • openssl: OpenSSL のデフォルトをそのまま使用します;

  • STRING: カスタムの文字列を使用します

ssl モジュールを参照してください。

Added in version 3.7.

バージョン 3.10 で変更: python と STRING の設定では、プロトコルの最小バージョンも TLS 1.2 に設定します。

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_SYMBOL if the Py_BUILD_CORE_MODULE is defined

  • Use Py_IMPORTED_SYMBOL otherwise.

共有ライブラリとしてビルドする C 拡張に誤って Py_BUILD_CORE_BUILTIN マクロを使用すると、PyInit_xxx() 関数がエクスポートされず、インポート時に ImportError が発生します。

3.5. コンパイラとリンカのフラグ

./configure スクリプトと環境変数によって設定され、Makefile で使用されるオプション。

3.5.1. プリプロセッサのフラグ

CONFIGURE_CPPFLAGS

./configure スクリプトに渡された CPPFLAGS 変数の値。

Added in version 3.6.

CPPFLAGS

(Objective) C/C++ プリプロセッサのフラグ。 例えば、標準以外のディレクトリ include_dir にヘッダーファイルがある場合の -Iinclude_dir。

Both CPPFLAGS and LDFLAGS need 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 -Werror because 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

./configure スクリプトに渡された CFLAGS 変数の値。

Added in version 3.2.

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 CPPFLAGS and LDFLAGS need 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.

脚注