3. Python を構成する
********************


3.1. ビルド要件
===============

CPython をビルドするためには、次のものが必要です:

* C11 コンパイラ。 C11 オプション機能 は不要です。

* Windows では、 Microsoft Visual Studio 2017 以降が必要です。

* IEEE 754 浮動小数点数と 浮動小数点 Not-a-Number (NaN) のサポート。

* スレッドのサポート。

バージョン 3.5 で変更: Windows では、 Visual Studio 2015 以降が必要と
なりました。

バージョン 3.6 で変更: "<stdint.h>" や "static inline" 関数など、C99
の一部の機能が必須となりました。

バージョン 3.7 で変更: スレッドのサポートが必須となりました。

バージョン 3.11 で変更: C11 コンパイラ、IEEE 754 および NaN のサポート
が必須となりました。 Windows では Visual Studio 2017 以降が必要です。

**PEP 7** 「Style Guide for C Code」と **PEP 11** 「CPython platform
support」も参照してください。


3.1.1. オプションのモジュールの要件
-----------------------------------

標準ライブラリの一部の *オプションモジュール* には、開発用にインストー
ルされたサードパーティライブラリが必要です (例えば、ヘッダーファイルが
利用可能でなければなりません)。

不足している要件は "configure" の出力に表示されます。 依存関係の不足に
より利用できないモジュールは、"make" の出力の終わり近くに一覧表示され
ます。 このとき、"ctypes" モジュールに対する "_ctypes" のように、内部
名が使われることがあります。

オプションモジュールを含まない CPython インタープリタを配布する場合は
、その旨をユーザーに知らせることを推奨します。 通常、ユーザーは標準ラ
イブラリのモジュールを利用できると期待しているためです。

オプションモジュールのビルドに必要な依存関係は次のとおりです:

+-----------------------------------+-----------------------------------+-----------------------------------+
| 依存関係                          | 最小バージョン                    | Python モジュール                 |
|===================================|===================================|===================================|
| libbz2                            |                                   | "bz2"                             |
+-----------------------------------+-----------------------------------+-----------------------------------+
| libffi                            | 3.3.0 推奨                        | "ctypes"                          |
+-----------------------------------+-----------------------------------+-----------------------------------+
| liblzma                           |                                   | "lzma"                            |
+-----------------------------------+-----------------------------------+-----------------------------------+
| libmpdec                          | 2.5.0                             | "decimal" [1]                     |
+-----------------------------------+-----------------------------------+-----------------------------------+
| libreadline または libedit [2]    |                                   | "readline"                        |
+-----------------------------------+-----------------------------------+-----------------------------------+
| libuuid                           |                                   | "_uuid" [3]                       |
+-----------------------------------+-----------------------------------+-----------------------------------+
| ncurses [4]                       |                                   | "curses"                          |
+-----------------------------------+-----------------------------------+-----------------------------------+
| OpenSSL                           | [6]                               | "ssl", "hashlib" [5]              |
+-----------------------------------+-----------------------------------+-----------------------------------+
| SQLite                            | 3.15.2                            | "sqlite3"                         |
+-----------------------------------+-----------------------------------+-----------------------------------+
| Tcl/Tk                            | 8.5.12                            | "tkinter", IDLE, "turtle"         |
+-----------------------------------+-----------------------------------+-----------------------------------+
| zlib                              | 1.2.2.1                           | "zlib", "gzip", "ensurepip"       |
+-----------------------------------+-----------------------------------+-----------------------------------+
| zstd                              | 1.4.5                             | "compression.zstd"                |
+-----------------------------------+-----------------------------------+-----------------------------------+

[1] *libmpdec* が利用できない場合、"decimal" モジュールは純粋な Python
    による実装を使用します。 詳しくは "--with-system-libmpdec" を参照
    してください。

[2] "readline" モジュールのバックエンドの選択については、"--with-
    readline" を参照してください。

[3] "uuid" モジュールは「安全な」UUID の生成に "_uuid" を使用します。
    詳しくはモジュールのドキュメントを参照してください。

[4] "curses" モジュールには "libncurses" または "libncursesw" ライブラ
    リが必要です。 "curses.panel" モジュールには、さらに "libpanel" ま
    たは "libpanelw" ライブラリが必要です。

[5] If OpenSSL is not available, the "hashlib" module will use bundled
    implementations of several hash functions. See "--with-builtin-
    hashlib-hashes" for *forcing* usage of OpenSSL.

[6] ビルドに使用できる OpenSSL の最小バージョンは 1.1.1 ですが、この系
    列はサポートが終了しており、セキュリティ修正は公開されなくなってい
    ます。 現在サポートされている LTS リリース系列の最新のパッチリリー
    ス (OpenSSL ロードマップ を参照)、または利用可能であれば OS が提供
    するパッケージを使用してください。 OpenSSL 1.1.1 以降と互換性のあ
    る API を提供するほかのライブラリも動作する可能性がありますが、正
    式にはサポートされていません。

この表には、すべてのオプションモジュールが含まれているわけではありませ
ん。 特に、"winreg" のようなプラットフォーム固有のモジュールは記載して
いません。

参考:

  * 開発者ガイド には、すべてのモジュールのビルドに必要な依存関係の一
    覧と、一般的なプラットフォームでのインストール手順が記載されていま
    す。

  * "--with-system-expat" を指定すると、外部の libexpat ライブラリを使
    用してビルドできます。

  * サードパーティ依存関係のオプション

バージョン 3.1 で変更: "tkinter" には Tcl/Tk バージョン 8.3.1 が必要と
なりました。

バージョン 3.5 で変更: "tkinter" には Tcl/Tk バージョン 8.4 が必要とな
りました。

バージョン 3.7 で変更: "hashlib" と "ssl" には OpenSSL 1.0.2 が必要と
なりました。

バージョン 3.10 で変更: "hashlib" と "ssl" には OpenSSL 1.1.1 が必要と
なりました。 "sqlite3" には SQLite 3.7.15 が必要となりました。

バージョン 3.11 で変更: "tkinter" には Tcl/Tk バージョン 8.5.12 が必要
となりました。

バージョン 3.13 で変更: "sqlite3" にはSQLite 3.15.2 が必要となりました
。


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

生成されるファイルは、使用するツールの細かなバージョンの違いによって変
わることがあります。 CPython が使用するコンテナには、Autoconf 2.72、
Automake 1.16.5 に含まれる "aclocal"、および pkg-config 1.8.1 がインス
トールされています。

バージョン 3.13 で変更: "configure" の再生成に Autoconf 2.71 と
aclocal 1.16.5 を使用するようになりました。

バージョン 3.14 で変更: "configure" の再生成に Autoconf 2.72 を使用す
るようになりました。


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** を参照してください。

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

--with-missing-stdlib-config=FILE

   不足している *標準ライブラリ* モジュールに対するカスタムエラーメッ
   セージを含む JSON 構成ファイルへのパス。

   このオプションは、標準ライブラリのモジュールが欠けている場合や別途
   パッケージ化されている場合に、ディストリビューション固有の案内をユ
   ーザーに示したい Python 配布者を対象としています。

   JSON ファイルでは、不足しているモジュール名をカスタムエラーメッセー
   ジの文字列に対応付けます。 例えば、ディストリビューションで
   "tkinter" と "_tkinter" を別々にパッケージ化し、法的な理由で
   "_gdbm" を除外している場合、次のように構成できます:

      {
          "_gdbm": "The '_gdbm' module is not available in this distribution",
          "tkinter": "Install the python-tk package to use tkinter",
          "_tkinter": "Install the python-tk package to use tkinter",
      }

   Added in version 3.15.

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

   *グローバルインタープリタロック* (GIL) を使用せずに Python を実行で
   きるようにします (*フリースレッドビルド*)。

   "Py_GIL_DISABLED" マクロを定義し、"sys.abiflags" に ""t"" を追加し
   ます。

   詳しくは フリースレッドの CPython を参照してください。

   Added in version 3.13.

--enable-experimental-jit=[no|yes|yes-off|interpreter]

   実験的なジャストインタイムコンパイラ の組み込み方法を指定します。

   * "no": JIT をビルドしません。

   * "yes": JIT を有効にします。 実行時に無効にするには、環境変数
     "PYTHON_JIT=0" を設定してください。

   * "yes-off": JIT をビルドしますが、デフォルトでは無効にします。 実
     行時に有効にするには、環境変数 "PYTHON_JIT=1" を設定してください
     。

   * "interpreter": 「JIT インタープリタ」を有効にします (JIT 自体をデ
     バッグする場合にのみ有用です)。 実行時に無効にするには、環境変数
     "PYTHON_JIT=0" を設定してください。

   オプションを指定しない場合のデフォルトの動作は "--enable-
   experimental-jit=no" で、"--enable-experimental-jit" は "--enable-
   experimental-jit=yes" の省略形です。 ビルド時に必要な依存関係のイン
   ストール方法など、詳しくは "Tools/jit/README.md" を参照してください
   。

   注釈:

     JIT を有効にして CPython をビルドする場合は、システムに Python
     3.11 以降がインストールされていることを確認してください。

   Added in version 3.13.

PKG_CONFIG

   "pkg-config" ユーティリティへのパス。

PKG_CONFIG_LIBDIR

PKG_CONFIG_PATH

   "pkg-config" のオプション。

--disable-epoll

   "epoll" を使用せずにビルドします。 システムが *epoll_create* 関数を
   提供していても、"select.epoll()" は利用できなくなります。 この設定
   は、*epoll_create* または *epoll_create1* が利用できるものの、Linux
   の動作とは互換性がないシステムで使用できます。

   Added in version 3.15.


3.3.2. C コンパイラのオプション
-------------------------------

CC

   C コンパイラのコマンド。

CFLAGS

   C コンパイラのフラグ。

CPP

   C プリプロセッサのコマンド。

CPPFLAGS

   C プリプロセッサのフラグ。 ("-I*include_dir*" など)


3.3.3. リンカのオプション
-------------------------

LDFLAGS

   リンカのフラグ。 ("-L*library_directory*" など)

LIBS

   リンカに渡すライブラリ。 ("-l*library*" など)

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 コンパイラとリンカのフラグ。

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" の設定をオーバーライドします。

LIBZSTD_CFLAGS

LIBZSTD_LIBS

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

   Added in version 3.14.

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 オプション
-----------------------------

--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 を有効にします (対応するコンパイラではデフ
   ォルトで有効)。

--with-tail-call-interp

   CPython で末尾呼び出しを使用するインタープリタを有効にします。 有効
   にする場合は、PGO ("--enable-optimizations") も有効にすることを強く
   推奨します。 このオプションには、適切な末尾呼び出しのサポートと
   preserve_none 呼び出し規約を備えた C コンパイラが必要です。 例えば
   、Clang 19 以降はこの機能をサポートしています。

   Added in version 3.14.

--without-frame-pointers

   フレームポインタを無効にします。 デフォルトでは有効です (**PEP
   831** を参照)。

   デフォルトでは、ビルド時にフレームポインタまたはバックチェーンポイ
   ンタを生成するフラグを "BASECFLAGS" に追加します:

   * コンパイラが対応している場合、"-fno-omit-frame-pointer" と "-mno-
     omit-leaf-frame-pointer" の一方または両方を追加します。

   * 32 ビット ARM では、対応している場合に "-marm" と "-mno-thumb" の
     一方または両方を追加します。

   * s390x プラットフォームでは、対応している場合、上記のフレームポイ
     ンタ用フラグの *代わりに* "-mbackchain" を追加します。

   * ppc64le プラットフォームでは、Power ABI がコンパイラに対してデフ
     ォルトでバックチェーンを維持することを要求しているため、コンパイ
     ラフラグは不要です。

   フレームポインタがあると、プロファイラ、デバッガ、システムのトレー
   スツール ("perf"、"eBPF"、"dtrace"、"gdb") は、DWARF メタデータなし
   で C の呼び出しスタックをたどれます。 これらのフラグは "sysconfig"
   を通じてサードパーティの C 拡張にも伝わります。 コンパイラがこれら
   のフラグを認識しない場合、ビルド時に通知せずにスキップします。

   配布先でパッケージ化する人や、独自のビルドシステムでネイティブライ
   ブラリをビルドする作者は、同じフラグを設定して、すべてのネイティブ
   フレームにわたってスタックを巻き戻すための連鎖が途切れないようにし
   てください。

   Added in version 3.15.

--without-mimalloc

   高速な mimalloc アロケータを無効にします (デフォルトでは有効)。

   *フリースレッド* ビルドには mimalloc が必要なため、このオプションを
   "--disable-gil" と併用することはできません。

   "PYTHONMALLOC" 環境変数も参照してください。

--without-pymalloc

   Python 専用のメモリアロケータ pymalloc を無効にします (デフォルトで
   は有効)。

   "PYTHONMALLOC" 環境変数も参照してください。

--with-pymalloc-hugepages

   pymalloc のアリーナでヒュージページのサポートを有効にします (デフォ
   ルトでは無効)。 有効にすると、64 ビットプラットフォームでのアリーナ
   サイズが 2 MiB に増加し、アリーナの割り当てには "MAP_HUGETLB"
   (Linux) または "MEM_LARGE_PAGES" (Windows) を使用します。 通常のペ
   ージへのフォールバックは自動で行います。

   このオプションを指定してコンパイルした場合でも、環境変数
   "PYTHON_PYMALLOC_HUGEPAGES" を "1" に設定しない限り、実行時にヒュー
   ジページは使用 **されません**。 このように明示的な有効化が必要なの
   は、ヒュージページに次のような特性があるためです:

   * Linux ではリスクがあります。 ヒュージページのプールを使い切ると、
     ページフォールト ("os.fork()" 後のコピーオンライトによるフォール
     トを含む) により "SIGBUS" が送られ、プロセスが強制終了します。

   * Windows では特別な権限が必要です。 詳しくは Windows のラージペー
     ジのドキュメント を参照してください。 ユーザーが必要な権限
     SeLockMemoryPrivilege を持っていない場合、Python は起動に失敗しま
     す。

   configure スクリプトはプラットフォームが "MAP_HUGETLB" をサポートし
   ているか確認し、利用できない場合は警告を出力します。

   Windows では、"build.bat" に "--pymalloc-hugepages" フラグを指定す
   るか、MSBuild の "UsePymallocHugepages" プロパティを設定してくださ
   い。

   Added in version 3.15.

--without-doc-strings

   メモリ使用量を減らすため、静的なドキュメンテーション文字列を無効に
   します (デフォルトでは有効)。 Python で定義されたドキュメンテーショ
   ン文字列には影響しません。

   "WITH_DOC_STRINGS" マクロを定義しません。

   WITH_DOC_STRINGS

      静的なドキュメンテーション文字列をビルドに含めるには、このマクロ
      を定義します。 "--without-doc-strings" を使用しない限り、デフォ
      ルトで定義されます。

   "PyDoc_STRVAR()" マクロを参照してください。

--enable-profiling

   "gprof" による C レベルのコードのプロファイリングを有効にします (デ
   フォルトでは無効)。

--with-strict-overflow

   C コンパイラのフラグに "-fstrict-overflow" を追加します (デフォルト
   では代わりに "-fno-strict-overflow" を追加します)。

--without-remote-debug

   **PEP 768** で説明されているリモートデバッグのサポートを無効にしま
   す (デフォルトでは有効)。 このフラグを指定すると、**PEP 768** にあ
   るように、インタープリタが別のプロセスで Python ファイルの実行をス
   ケジュールできるようにするコードをコンパイルしません。 これには、実
   行するコードをスケジュールする機能と、実行するコードを受信する機能
   の両方が含まれます。

   Py_REMOTE_DEBUG

      Python の構成時に "--without-remote-debug" を指定しない限り、こ
      のマクロはデフォルトで定義されます。

      マクロが定義されていても、リモートデバッグが利用できない場合があ
      ることに注意してください (例えば、互換性のないプラットフォームの
      場合)。

   Added in version 3.14.


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 で変更: リリースビルドがデバッグビルドと ABI 互換になり
ました。 "Py_DEBUG" マクロを定義しても、"Py_TRACE_REFS" マクロが暗黙に
定義されることはなくなりました ("--with-trace-refs" オプションを参照)
。 ただし、デバッグビルドが公開するシンボルはリリースビルドよりも多く
、デバッグビルドに対してビルドしたコードがリリースビルドと互換性を持つ
とは限りません。


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

   メモリエラー検出ツール AddressSanitizer ("asan") を有効にします (デ
   フォルトでは無効)。 ASan の検出能力を高めるには、"--without-
   pymalloc" と併用することも検討してください。 このオプションは、ASan
   が割り当てを追跡しない、小さなオブジェクト専用のアロケータを無効に
   します。

   Added in version 3.6.

--with-memory-sanitizer

   メモリ割り当てエラー検出ツール MemorySanitizer ("msan") を有効にし
   ます (デフォルトでは無効)。

   MSan を使わずにビルドしたライブラリが初期化したメモリに対し、MSan
   は誤検出を報告します。 そのため、すべての依存関係を MSan でビルドす
   るか、それらを使用する拡張モジュールを "Modules/Setup.local" で無効
   にしてください。

   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.

--enable-static-libpython-for-interpreter

   Python インタープリタのバイナリ ("python3") を Python の共有ライブ
   ラリにリンクしません。 代わりに、"--enable-shared" を使用しなかった
   場合と同様に、インタープリタを "libpython" に静的にリンクしますが、
   (ほかのプログラムが使用するための) "libpython" 共有ライブラリのビル
   ドは引き続き行います。

   "--enable-shared" を使用しない場合、このオプションは何もしません。

   The default (when "-enable-shared" is used) is to link the Python
   interpreter against the built shared library.

   Added in version 3.15.


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"
   ライブラリを使用するようになりました。

   バージョン 3.15 で変更: インストール済みの "mpdecimal" ライブラリが
   見つからない場合に、同梱のライブラリが暗黙に選択されることはなくな
   りました。 Python 3.15 に限り、"--with-system-libmpdec=no" または "
   --without-system-libmpdec" を使用して明示的に選択することは引き続き
   可能です。

   バージョン 3.13 で非推奨、バージョン 3.16 で削除予定: Python 3.16
   では、"mpdecimal" ライブラリのソースコードのコピーが同梱されなくな
   ります。

   参考: "LIBMPDEC_CFLAGS" と "LIBMPDEC_LIBS"。

--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 に設定します。

--disable-safety

   セキュリティ上の理由で OpenSSF が推奨する、パフォーマンスのオーバー
   ヘッドを伴わないコンパイラオプションを無効にします。 このオプション
   を有効にしなければ、CPython は速度の低下を伴わない安全性のためのコ
   ンパイラオプションを使用してビルドされます。 このオプションを有効に
   すると、以下のコンパイラオプションを使用せずに CPython をビルドしま
   す。

   "--disable-safety" を指定すると、次のコンパイラオプションを無効にし
   ます:

   * -fstack-protector-strong: スタック上のバッファオーバーフローに対
     する実行時のチェックを有効にします。

   * -Wtrampolines: 実行可能スタックを必要とするトランポリンに関する警
     告を有効にします。

   Added in version 3.14.

--enable-slower-safety

   セキュリティ上の理由で OpenSSF が推奨する、オーバーヘッドを伴うコン
   パイラオプションを有効にします。 このオプションを有効にしなければ、
   CPython はパフォーマンスに影響する安全性のためのコンパイラオプショ
   ンを使用せずにビルドされます。 このオプションを有効にすると、以下の
   コンパイラオプションを使用して CPython をビルドします。

   "--enable-slower-safety" を指定すると、次のコンパイラオプションを有
   効にします:

   * -D_FORTIFY_SOURCE=3: libc の安全でない使用とバッファオーバーフロ
     ーに対して、コンパイル時および実行時のチェックを行い、ソースコー
     ドを強化します。

   Added in version 3.14.


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 のオプション
------------------------

Platforms/Apple/iOS/README.md を参照してください。

--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" (ホストプラットフォームが "wasm32-wasi*" または
  "wasm32-emscripten" に一致する場合に選択)

* "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" を実行する必要があります。
[7]


3.4.3.6. make install
~~~~~~~~~~~~~~~~~~~~~

"all" ターゲットをビルドし、Python をインストールします。


3.4.3.7. make test
~~~~~~~~~~~~~~~~~~

"all" ターゲットをビルドし、"--fast-ci" オプションを指定して、GUI テス
トを除いた Python のテストスイートを実行します。 変数:

* "TESTOPTS": regrtest の追加のコマンドラインオプション。

* "TESTPYTHONOPTS": Python の追加のコマンドラインオプション。

* "TESTTIMEOUT": タイムアウトの秒数 (デフォルト: 10 分)。


3.4.3.8. make ci
~~~~~~~~~~~~~~~~

"make test" と似ていますが、"-ugui" を指定して GUI テストも実行します
。

Added in version 3.14.


3.4.3.9. make buildbottest
~~~~~~~~~~~~~~~~~~~~~~~~~~

"make test" と似ていますが、"--fast-ci" オプションの代わりに "--slow-
ci" オプションを使用し、デフォルトのタイムアウトを 20 分にします。


3.4.3.10. 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* にヘッダーファイルがある場合の
   "-I*include_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.

CFLAGS_CEVAL

   "Python/ceval.c" のコンパイルに使用するフラグ。

   Added in version 3.14.5.

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* にライブ
   ラリがある場合の "-L*lib_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.

   指定するリンカフラグが GCC の "-pie" フラグのように実行ファイル専用
   のものであれば、"EXE_LDFLAGS" の使用を検討してください。

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.

EXE_LDFLAGS

   インタープリタなどの実行ファイルターゲットのビルドに使用するリンカ
   フラグ。 "PY_CORE_EXE_LDFLAGS" を指定すると、"PY_CORE_LDFLAGS" の代
   わりに使用します。

   Added in version 3.15.

CONFIGURE_EXE_LDFLAGS

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

   Added in version 3.15.

PY_CORE_EXE_LDFLAGS

   インタープリタと実行ファイルターゲットのビルドに使用するリンカフラ
   グ。

   デフォルト: "$(PY_CORE_LDFLAGS)"

   Added in version 3.15.

-[ 脚注 ]-

[7] チェックアウトを「クリーン」にするさらに徹底した方法は、"git clean
    -fdx" です。 このコマンドは Git が認識していないファイルをすべて削
    除します。 "git bisect" でバグを調査するときは、完全にクリーンなビ
    ルドを保証するため、各調査の間での実行が推奨されています。 新しく
    作成した未コミットの作業を含め、Git にチェックインされていないすべ
    てのファイルを削除するため、**注意して使用してください**。
