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 で追加.
-
--enable-big-digits
=[15|30]
¶ Python
int
の桁の大きさをビット単位で定義します: 15ビットまたは30ビットです。By default, the number of bits is selected depending on
sizeof(void*)
: 30 bits ifvoid*
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 で追加.
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
.
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
orlld
).バージョン 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
tosys.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
andPy_REF_DEBUG
macros.Add runtime checks: code surroundeded by
#ifdef Py_DEBUG
and#endif
. Enableassert(...)
and_PyObject_ASSERT(...)
assertions: don't set theNDEBUG
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
andPy_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 theOPT
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 building a shared Python library:
libpython
(default is no).
-
--without-static-libpython
¶
Do not build
libpythonMAJOR.MINOR.a
and do not installpython.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 installedexpat
library (default is no).
-
--with-system-ffi
¶
Build the
_ctypes
extension module using an installedffi
library, see thectypes
module (default is system-dependent).
-
--with-system-libmpdec
¶
Build the
_decimal
extension module using an installedmpdec
library, see thedecimal
module (default is no).バージョン 3.3 で追加.
-
--with-readline
=editline
¶ Use
editline
library for backend of thereadline
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
andpkg-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 thedistutils
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 staticlibpython
library are linked into the finalpython
program.C extensions are built by the Makefile (see
Modules/Setup
) andpython setup.py build
.
3.2.3. Main Makefile targets¶
make
: Build Python with the standard library.make platform:
: build thepython
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 themake
command (make all
or justmake
).make buildbottest
: Build Python and run the Python test suite, the same way than buildbots test Python. SetTESTTIMEOUT
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
andautoconf
must be run separately for the remaining generated files.make clean
: Remove built files.make distclean
: Same thanmake 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 thePy_BUILD_CORE_MODULE
is definedUse
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¶
-
CPPFLAGS
¶ (Objective) C/C++ preprocessor flags, e.g.
-I<include dir>
if you have headers in a nonstandard directory<include dir>
.Both
CPPFLAGS
andLDFLAGS
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 likepython
.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 distutilsCFLAGS
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 inCFLAGS
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_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 asCFLAGS_NODIST
. Use it when a linker flag should not be part of the distutilsLDFLAGS
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 inLDFLAGS
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
andLDFLAGS
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 で追加.