# 3. Python を構成する

## 3.1. Configureオプション

次のコマンドで、全ての `./configure` オプションを表示できます。

    ./configure --help

Pythonのソース配布の中の `Misc/SpecialBuilds.txt` も参照してください。

### 3.1.1. 一般的なオプション

`--enable-loadable-sqlite-extensions```

  `_sqlite` 拡張モジュールで、ロード可能な拡張をサポートします。（デフォルト: no）

  `sqlite3` モジュールの `sqlite3.Connection.enable_load_extension()` メソッドを参照してください。

  バージョン 3.6 で追加.

`--disable-ipv6```

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

`--enable-big-digits``=[15|30]`

  Python `int` の桁の大きさをビット単位で定義します: 15ビットまたは30ビットです。

  By default, the number of bits is selected depending on `sizeof(void*)`: 30 bits if `void*` size is 64-bit or larger, 15 bits otherwise.

  `PYLONG_BITS_IN_DIGIT` を `15` または `30` に定義します。

  `sys.int_info.bits_per_digit` を参照してください。

`--with-cxx-main```

`--with-cxx-main``=COMPILER`

  Python の `main()` 関数をコンパイルし、C++ コンパイラで Python の実行ファイルをリンクします: C++コンパイラ: `$CXX` 、または COMPILER が指定されている場合は、そのコンパイラで Python 実行ファイルをリンクします。

`--with-suffix``=SUFFIX`

  Python の実行ファイルの接尾辞を SUFFIX に設定します。

  The default suffix is `.exe` on Windows and macOS (`python.exe` executable), and an empty string on other platforms (`python` executable).

`--with-tzpath``=<list of absolute paths separated by pathsep>`

  デフォルトのタイムゾーン検索パスを `zoneinfo.TZPATH` に設定します。`zoneinfo` モジュールの Compile-time configuration を参照してください。

  デフォルト: `/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo`

  `os.pathsep` パスセパレータを参照してください。

  バージョン 3.9 で追加.

`--without-decimal-contextvar```

  コルーチンローカルコンテキスト(デフォルト)ではなく、スレッドローカルコンテキストを使用して `_decimal` 拡張モジュールをビルドします。 `decimal` モジュールを参照してください。

  `decimal.HAVE_CONTEXTVAR` および `contextvars` モジュールを参照してください。

  バージョン 3.9 で追加.

`--with-dbmliborder``=db1:db2:...`

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

  バージョン 3.9 で追加.

`--with-wheel-pkg-dir``=PATH`

  `ensurepip` モジュールが使用する wheel パッケージのディレクトリです(デフォルトはなし)。

  Linux ディストリビューションのパッケージングポリシーの中には、依存関係をバンドルすることを推奨しているものがあります。例えば、 Fedora は wheel パッケージを `/usr/share/python-wheels/` ディレクトリにインストールし、 `ensurepip._bundled` パッケージはインストールしません。

  バージョン 3.10 で追加.

### 3.1.2. インストールオプション

`--prefix``=PREFIX`

  Install architecture-independent files in PREFIX. On Unix, it defaults to `/usr/local`.

  This value can be retrived at runtime using `sys.prefix`.

  As an example, one can use `--prefix="$HOME/.local/"` to install a Python in its home directory.

`--exec-prefix``=EPREFIX`

  Install architecture-dependent files in EPREFIX, defaults to `--prefix`.

  This value can be retrived at runtime using `sys.exec_prefix`.

`--disable-test-modules```

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

  バージョン 3.10 で追加.

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

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

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

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

  - `no`: ensurepip を実行しない;

  バージョン 3.6 で追加.

### 3.1.3. パフォーマンスに関するオプション

Python の構成は、 `--enable-optimizations --with-lto` (PGO + LTO)を使用すると、最高のパフォーマンスが得られます。

`--enable-optimizations```

  `PROFILE_TASK` を使用して Profile Guided Optimization (PGO) を有効にします(デフォルトでは無効です)。

  Cコンパイラの Clang では、 PGO のために `llvm-profdata` プログラムが必要です。macOS では、 GCC もこれを必要とします: GCC は macOS の Clang のエイリアスにすぎません。

  Disable also semantic interposition in libpython if `--enable-shared` and GCC is used: add `-fno-semantic-interposition` to the compiler and linker flags.

  バージョン 3.6 で追加.

  バージョン 3.10 で変更: GCC で `-fno-semantic-interposition` を使用する。

`PROFILE_TASK`

  Environment variable used in the Makefile: Python command line arguments for the PGO generation task.

  デフォルト: `-m test --pgo --timeout=$(TESTTIMEOUT)`

  バージョン 3.8 で追加.

`--with-lto```

  Enable Link Time Optimization (LTO) in any build (disabled by default).

  The C compiler Clang requires `llvm-ar` for LTO (`ar` on macOS), as well as an LTO-aware linker (`ld.gold` or `lld`).

  バージョン 3.6 で追加.

`--with-computed-gotos```

  Enable computed gotos in evaluation loop (enabled by default on supported compilers).

`--without-pymalloc```

  Disable the specialized Python memory allocator pymalloc (enabled by default).

  See also `PYTHONMALLOC` environment variable.

`--without-doc-strings```

  Disable static documentation strings to reduce the memory footprint (enabled by default). Documentation strings defined in Python are not affected.

  Don't define the `WITH_DOC_STRINGS` macro.

  See the `PyDoc_STRVAR()` macro.

`--enable-profiling```

  Enable C-level code profiling with `gprof` (disabled by default).

### 3.1.4. Python Debug Build

A debug build is Python built with the `--with-pydebug` configure option.

Effects of a debug build:

- Display all warnings by default: the list of default warning filters is empty in the `warnings` module.

- Add `d` to `sys.abiflags`.

- Add `sys.gettotalrefcount()` function.

- Add `-X showrefcount` command line option.

- Add `PYTHONTHREADDEBUG` environment variable.

- Add support for the `__ltrace__` variable: enable low-level tracing in the bytecode evaluation loop if the variable is defined.

- Install debug hooks on memory allocators to detect buffer overflow and other memory errors.

- Define `Py_DEBUG` and `Py_REF_DEBUG` macros.

- Add runtime checks: code surroundeded by `#ifdef Py_DEBUG` and `#endif`. Enable `assert(...)` and `_PyObject_ASSERT(...)` assertions: don't set the `NDEBUG` macro (see also the `--with-assertions` configure option). Main runtime checks:

  - Add sanity checks on the function arguments.

  - Unicode and int objects are created with their memory filled with a pattern to detect usage of uninitialized objects.

  - Ensure that functions which can clear or replace the current exception are not called with an exception raised.

  - The garbage collector (`gc.collect()` function) runs some basic checks on objects consistency.

  - The `Py_SAFE_DOWNCAST()` macro checks for integer underflow and overflow when downcasting from wide types to narrow types.

See also the Python Development Mode and the `--with-trace-refs` configure option.

バージョン 3.8 で変更: Release builds and debug builds are now ABI compatible: defining the `Py_DEBUG` macro no longer implies the `Py_TRACE_REFS` macro (see the `--with-trace-refs` option), which introduces the only ABI incompatibility.

### 3.1.5. Debug options

`--with-pydebug```

  Build Python in debug mode: define the `Py_DEBUG` macro (disabled by default).

`--with-trace-refs```

  Enable tracing references for debugging purpose (disabled by default).

  Effects:

  - Define the `Py_TRACE_REFS` macro.

  - Add `sys.getobjects()` function.

  - Add `PYTHONDUMPREFS` environment variable.

  This build is not ABI compatible with release build (default build) or debug build (`Py_DEBUG` and `Py_REF_DEBUG` macros).

  バージョン 3.8 で追加.

`--with-assertions```

  Build with C assertions enabled (default is no): `assert(...);` and `_PyObject_ASSERT(...);`.

  If set, the `NDEBUG` macro is not defined in the `OPT` compiler variable.

  See also the `--with-pydebug` option (debug build) which also enables assertions.

  バージョン 3.6 で追加.

`--with-valgrind```

  Enable Valgrind support (default is no).

`--with-dtrace```

  Enable DTrace support (default is no).

  See Instrumenting CPython with DTrace and SystemTap.

  バージョン 3.6 で追加.

`--with-address-sanitizer```

  Enable AddressSanitizer memory error detector, `asan` (default is no).

  バージョン 3.6 で追加.

`--with-memory-sanitizer```

  Enable MemorySanitizer allocation error detector, `msan` (default is no).

  バージョン 3.6 で追加.

`--with-undefined-behavior-sanitizer```

  Enable UndefinedBehaviorSanitizer undefined behaviour detector, `ubsan` (default is no).

  バージョン 3.6 で追加.

### 3.1.6. リンカのオプション

`--enable-shared```

  Enable building a shared Python library: `libpython` (default is no).

`--without-static-libpython```

  Do not build `libpythonMAJOR.MINOR.a` and do not install `python.o` (built and enabled by default).

  バージョン 3.10 で追加.

### 3.1.7. Libraries options

`--with-libs``='lib1 ...'`

  Link against additional libraries (default is no).

`--with-system-expat```

  Build the `pyexpat` module using an installed `expat` library (default is no).

`--with-system-ffi```

  Build the `_ctypes` extension module using an installed `ffi` library, see the `ctypes` module (default is system-dependent).

`--with-system-libmpdec```

  Build the `_decimal` extension module using an installed `mpdec` library, see the `decimal` module (default is no).

  バージョン 3.3 で追加.

`--with-readline``=editline`

  Use `editline` library for backend of the `readline` module.

  Define the `WITH_EDITLINE` macro.

  バージョン 3.10 で追加.

`--without-readline```

  Don't build the `readline` module (built by default).

  Don't define the `HAVE_LIBREADLINE` macro.

  バージョン 3.10 で追加.

`--with-tcltk-includes``='-I...'`

  Override search for Tcl and Tk include files.

`--with-tcltk-libs``='-L...'`

  Override search for Tcl and Tk libraries.

`--with-libm``=STRING`

  Override `libm` math library to STRING (default is system-dependent).

`--with-libc``=STRING`

  Override `libc` C library to STRING (default is system-dependent).

`--with-openssl``=DIR`

  Root of the OpenSSL directory.

  バージョン 3.7 で追加.

`--with-openssl-rpath``=[no|auto|DIR]`

  Set runtime library directory (rpath) for OpenSSL libraries:

  - `no` (default): don't set rpath;

  - `auto`: auto-detect rpath from `--with-openssl` and `pkg-config`;

  - DIR: set an explicit rpath.

  バージョン 3.10 で追加.

### 3.1.8. Security Options

`--with-hash-algorithm``=[fnv|siphash24]`

  Select hash algorithm for use in `Python/pyhash.c`:

  - `siphash24` (default).

  - `fnv`;

  バージョン 3.4 で追加.

`--with-builtin-hashlib-hashes``=md5,sha1,sha256,sha512,sha3,blake2`

  Built-in hash modules:

  - `md5`;

  - `sha1`;

  - `sha256`;

  - `sha512`;

  - `sha3` (with shake);

  - `blake2`.

  バージョン 3.9 で追加.

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

  Override the OpenSSL default cipher suites string:

  - `python` (default): use Python's preferred selection;

  - `openssl`: leave OpenSSL's defaults untouched;

  - STRING: use a custom string

  See the `ssl` module.

  バージョン 3.7 で追加.

  バージョン 3.10 で変更: The settings `python` and STRING also set TLS 1.2 as minimum protocol version.

### 3.1.9. macOS のオプション

See `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`;

  - `32-bit`;

  - `64-bit`;

  - `3-way`;

  - `intel`;

  - `intel-32`;

  - `intel-64`;

  - `all`。

`--with-framework-name``=FRAMEWORK`

  macOS の Python フレームワークの名前を指定します。 `--enable-framework` が指定された場合のみ有効です (デフォルトでは `Python`) 。

## 3.2. Python ビルドシステム

### 3.2.1. ビルドシステムの主要なファイル

- `configure.ac` => `configure`;

- `Makefile.pre.in` => `Makefile` (`configure` により作成されます);

- `pyconfig.h` (`configure` により作成されます);

- `Modules/Setup`: `Module/makesetup` シェルスクリプトを使用して Makefile がビルドする C 拡張。

- `setup.py`: C extensions built using the `distutils` module.

### 3.2.2. 主要なビルドステップ

- C files (`.c`) are built as object files (`.o`).

- A static `libpython` library (`.a`) is created from objects files.

- `python.o` and the static `libpython` library are linked into the final `python` program.

- C extensions are built by the Makefile (see `Modules/Setup`) and `python setup.py build`.

### 3.2.3. Main Makefile targets

- `make`: Build Python with the standard library.

- `make platform:`: build the `python` program, but don't build the standard library extension modules.

- `make profile-opt`: build Python using Profile Guided Optimization (PGO). You can use the configure `--enable-optimizations` option to make this the default target of the `make` command (`make all` or just `make`).

- `make buildbottest`: Build Python and run the Python test suite, the same way than buildbots test Python. Set `TESTTIMEOUT` variable (in seconds) to change the test timeout (1200 by default: 20 minutes).

- `make install`: Build and install Python.

- `make regen-all`: Regenerate (almost) all generated files; `make regen-stdlib-module-names` and `autoconf` must be run separately for the remaining generated files.

- `make clean`: Remove built files.

- `make distclean`: Same than `make clean`, but remove also files created by the configure script.

### 3.2.4. C extensions

Some C extensions are built as built-in modules, like the `sys` module. They are built with the `Py_BUILD_CORE_BUILTIN` macro defined. Built-in modules have no `__file__` attribute:

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

Other C extensins are built as dynamic libraries, like the `_asyncio` module. They are built with the `Py_BUILD_CORE_MODULE` macro defined. Example on 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` is used to generate Makefile targets to build C extensions. At the beginning of the files, C extensions are built as built-in modules. Extensions defined after the `*shared*` marker are built as dynamic libraries.

The `setup.py` script only builds C extensions as shared libraries using the `distutils` module.

The `PyAPI_FUNC()`, `PyAPI_API()` and `PyMODINIT_FUNC()` macros of `Include/pyport.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.

If the `Py_BUILD_CORE_BUILTIN` macro is used by mistake on a C extension built as a shared library, its `PyInit_xxx()` function is not exported, causing an `ImportError` on import.

## 3.3. Compiler and linker flags

Options set by the `./configure` script and environment variables and used by `Makefile`.

### 3.3.1. Preprocessor flags

`CONFIGURE_CPPFLAGS`

  Value of `CPPFLAGS` variable passed to the `./configure` script.

  バージョン 3.6 で追加.

`CPPFLAGS`

  (Objective) C/C++ preprocessor flags, e.g. `-I<include dir>` if you have headers in a nonstandard directory `<include dir>`.

  Both `CPPFLAGS` and `LDFLAGS` need to contain the shell's value for setup.py to be able to build extension modules using the directories specified in the environment variables.

`BASECPPFLAGS`

  バージョン 3.4 で追加.

`PY_CPPFLAGS`

  Extra preprocessor flags added for building the interpreter object files.

  Default: `$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)`.

  バージョン 3.2 で追加.

### 3.3.2. Compiler flags

`CC`

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

  Example: `gcc -pthread`.

`MAINCC`

  C compiler command used to build the `main()` function of programs like `python`.

  Variable set by the `--with-cxx-main` option of the configure script.

  Default: `$(CC)`.

`CXX`

  C++ compiler command.

  Used if the `--with-cxx-main` option is used.

  Example: `g++ -pthread`.

`CFLAGS`

  C コンパイラのフラグ。

`CFLAGS_NODIST`

  `CFLAGS_NODIST` is used for building the interpreter and stdlib C extensions. Use it when a compiler flag should not be part of the distutils `CFLAGS` once Python is installed (bpo-21121).

  In particular, `CFLAGS` should not contain:

  - the compiler flag `-I` (for setting the search path for include files). The `-I` flags are processed from left to right, and any flags in `CFLAGS` would take precedence over user- and package-supplied `-I` flags.

  - hardening flags such as `-Werror` because distributions cannot control whether packages installed by users conform to such heightened standards.

  バージョン 3.5 で追加.

`EXTRA_CFLAGS`

  Extra C compiler flags.

`CONFIGURE_CFLAGS`

  Value of `CFLAGS` variable passed to the `./configure` script.

  バージョン 3.2 で追加.

`CONFIGURE_CFLAGS_NODIST`

  Value of `CFLAGS_NODIST` variable passed to the `./configure` script.

  バージョン 3.5 で追加.

`BASECFLAGS`

  Base compiler flags.

`OPT`

  Optimization flags.

`CFLAGS_ALIASING`

  Strict or non-strict aliasing flags used to compile `Python/dtoa.c`.

  バージョン 3.7 で追加.

`CCSHARED`

  Compiler flags used to build a shared library.

  For example, `-fPIC` is used on Linux and on BSD.

`CFLAGSFORSHARED`

  Extra C flags added for building the interpreter object files.

  Default: `$(CCSHARED)` when `--enable-shared` is used, or an empty string otherwise.

`PY_CFLAGS`

  Default: `$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)`.

`PY_CFLAGS_NODIST`

  Default: `$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal`.

  バージョン 3.5 で追加.

`PY_STDMODULE_CFLAGS`

  C flags used for building the interpreter object files.

  Default: `$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)`.

  バージョン 3.7 で追加.

`PY_CORE_CFLAGS`

  Default: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE`.

  バージョン 3.2 で追加.

`PY_BUILTIN_MODULE_CFLAGS`

  Compiler flags to build a standard library extension module as a built-in module, like the `posix` module.

  Default: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN`.

  バージョン 3.8 で追加.

`PURIFY`

  Purify command. Purify is a memory debugger program.

  Default: empty string (not used).

### 3.3.3. Linker flags

`LINKCC`

  Linker command used to build programs like `python` and `_testembed`.

  Default: `$(PURIFY) $(MAINCC)`.

`CONFIGURE_LDFLAGS`

  Value of `LDFLAGS` variable passed to the `./configure` script.

  Avoid assigning `CFLAGS`, `LDFLAGS`, etc. so users can use them on the command line to append to these values without stomping the pre-set values.

  バージョン 3.2 で追加.

`LDFLAGS_NODIST`

  `LDFLAGS_NODIST` is used in the same manner as `CFLAGS_NODIST`. Use it when a linker flag should not be part of the distutils `LDFLAGS` once Python is installed (bpo-35257).

  In particular, `LDFLAGS` should not contain:

  - the compiler flag `-L` (for setting the search path for libraries). The `-L` flags are processed from left to right, and any flags in `LDFLAGS` would take precedence over user- and package-supplied `-L` flags.

`CONFIGURE_LDFLAGS_NODIST`

  Value of `LDFLAGS_NODIST` variable passed to the `./configure` script.

  バージョン 3.8 で追加.

`LDFLAGS`

  Linker flags, e.g. `-L<lib dir>` if you have libraries in a nonstandard directory `<lib dir>`.

  Both `CPPFLAGS` and `LDFLAGS` need to contain the shell's value for setup.py to be able to build extension modules using the directories specified in the environment variables.

`LIBS`

  Linker flags to pass libraries to the linker when linking the Python executable.

  Example: `-lrt`.

`LDSHARED`

  Command to build a shared library.

  Default: `@LDSHARED@ $(PY_LDFLAGS)`.

`BLDSHARED`

  Command to build `libpython` shared library.

  Default: `@BLDSHARED@ $(PY_CORE_LDFLAGS)`.

`PY_LDFLAGS`

  Default: `$(CONFIGURE_LDFLAGS) $(LDFLAGS)`.

`PY_LDFLAGS_NODIST`

  Default: `$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)`.

  バージョン 3.8 で追加.

`PY_CORE_LDFLAGS`

  Linker flags used for building the interpreter object files.

  バージョン 3.8 で追加.