List all ./configure script options using:
./configure --help
See also the :file:`Misc/SpecialBuilds.txt` in the Python source distribution.
.. cmdoption:: --enable-loadable-sqlite-extensions Support loadable extensions in the :mod:`_sqlite` extension module (default is no). See the :meth:`sqlite3.Connection.enable_load_extension` method of the :mod:`sqlite3` module. .. versionadded:: 3.6
.. cmdoption:: --disable-ipv6 Disable IPv6 support (enabled by default if supported), see the :mod:`socket` module.
.. cmdoption:: --enable-big-digits=[15|30] Define the size in bits of Python :class:`int` digits: 15 or 30 bits. 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. Define the ``PYLONG_BITS_IN_DIGIT`` to ``15`` or ``30``. See :data:`sys.int_info.bits_per_digit <sys.int_info>`.
.. cmdoption:: --with-cxx-main
.. cmdoption:: --with-cxx-main=COMPILER Compile the Python ``main()`` function and link Python executable with C++ compiler: ``$CXX``, or *COMPILER* if specified.
.. cmdoption:: --with-suffix=SUFFIX Set the Python executable suffix to *SUFFIX*. The default suffix is ``.exe`` on Windows and macOS (``python.exe`` executable), and an empty string on other platforms (``python`` executable).
.. cmdoption:: --with-tzpath=<list of absolute paths separated by pathsep> Select the default time zone search path for :data:`zoneinfo.TZPATH`. See the :ref:`Compile-time configuration <zoneinfo_data_compile_time_config>` of the :mod:`zoneinfo` module. Default: ``/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo``. See :data:`os.pathsep` path separator. .. versionadded:: 3.9
.. cmdoption:: --without-decimal-contextvar Build the ``_decimal`` extension module using a thread-local context rather than a coroutine-local context (default), see the :mod:`decimal` module. See :data:`decimal.HAVE_CONTEXTVAR` and the :mod:`contextvars` module. .. versionadded:: 3.9
.. cmdoption:: --with-dbmliborder=db1:db2:... Override order to check db backends for the :mod:`dbm` module A valid value is a colon (``:``) separated string with the backend names: * ``ndbm``; * ``gdbm``; * ``bdb``.
.. cmdoption:: --without-c-locale-coercion Disable C locale coercion to a UTF-8 based locale (enabled by default). Don't define the ``PY_COERCE_C_LOCALE`` macro. See :envvar:`PYTHONCOERCECLOCALE` and the :pep:`538`.
.. cmdoption:: --with-platlibdir=DIRNAME Python library directory name (default is ``lib``). Fedora and SuSE use ``lib64`` on 64-bit platforms. See :data:`sys.platlibdir`. .. versionadded:: 3.9
.. cmdoption:: --with-wheel-pkg-dir=PATH Directory of wheel packages used by the :mod:`ensurepip` module (none by default). Some Linux distribution packaging policies recommend against bundling dependencies. For example, Fedora installs wheel packages in the ``/usr/share/python-wheels/`` directory and don't install the :mod:`ensurepip._bundled` package. .. versionadded:: 3.10
.. cmdoption:: --prefix=PREFIX Install architecture-independent files in PREFIX. On Unix, it defaults to :file:`/usr/local`. This value can be retrived at runtime using :data:`sys.prefix`. As an example, one can use ``--prefix="$HOME/.local/"`` to install a Python in its home directory.
.. cmdoption:: --exec-prefix=EPREFIX Install architecture-dependent files in EPREFIX, defaults to :option:`--prefix`. This value can be retrived at runtime using :data:`sys.exec_prefix`.
.. cmdoption:: --disable-test-modules Don't build nor install test modules, like the :mod:`test` package or the :mod:`_testcapi` extension module (built and installed by default). .. versionadded:: 3.10
.. cmdoption:: --with-ensurepip=[upgrade|install|no]
Select the :mod:`ensurepip` command run on Python installation:
* ``upgrade`` (default): run ``python -m ensurepip --altinstall --upgrade``
command.
* ``install``: run ``python -m ensurepip --altinstall`` command;
* ``no``: don't run ensurepip;
.. versionadded:: 3.6
Configuring Python using --enable-optimizations --with-lto (PGO + LTO) is
recommended for best performance.
.. cmdoption:: --enable-optimizations
Enable Profile Guided Optimization (PGO) using :envvar:`PROFILE_TASK`
(disabled by default).
The C compiler Clang requires ``llvm-profdata`` program for PGO. On
macOS, GCC also requires it: GCC is just an alias to Clang on macOS.
Disable also semantic interposition in libpython if ``--enable-shared`` and
GCC is used: add ``-fno-semantic-interposition`` to the compiler and linker
flags.
.. versionadded:: 3.6
.. versionchanged:: 3.10
Use ``-fno-semantic-interposition`` on GCC.
.. envvar:: PROFILE_TASK Environment variable used in the Makefile: Python command line arguments for the PGO generation task. Default: ``-m test --pgo --timeout=$(TESTTIMEOUT)``. .. versionadded:: 3.8
.. cmdoption:: --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``). .. versionadded:: 3.6
.. cmdoption:: --with-computed-gotos Enable computed gotos in evaluation loop (enabled by default on supported compilers).
.. cmdoption:: --without-pymalloc Disable the specialized Python memory allocator :ref:`pymalloc <pymalloc>` (enabled by default). See also :envvar:`PYTHONMALLOC` environment variable.
.. cmdoption:: --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.
.. cmdoption:: --enable-profiling Enable C-level code profiling with ``gprof`` (disabled by default).
A debug build is Python built with the :option:`--with-pydebug` configure option.
Effects of a debug build:
- Display all warnings by default: the list of default warning filters is empty in the :mod:`warnings` module.
- Add
dto :data:`sys.abiflags`. - Add :func:`sys.gettotalrefcount` function.
- Add :option:`-X showrefcount <-X>` command line option.
- Add :envvar:`PYTHONTHREADDEBUG` environment variable.
- Add support for the
__ltrace__variable: enable low-level tracing in the bytecode evaluation loop if the variable is defined. - Install :ref:`debug hooks on memory allocators <default-memory-allocators>` to detect buffer overflow and other memory errors.
- Define
Py_DEBUGandPy_REF_DEBUGmacros. - Add runtime checks: code surroundeded by
#ifdef Py_DEBUGand#endif. Enableassert(...)and_PyObject_ASSERT(...)assertions: don't set theNDEBUGmacro (see also the :option:`--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 (:func:`gc.collect` function) runs some basic checks on objects consistency.
- The :c:macro:`Py_SAFE_DOWNCAST()` macro checks for integer underflow and overflow when downcasting from wide types to narrow types.
See also the :ref:`Python Development Mode <devmode>` and the :option:`--with-trace-refs` configure option.
.. versionchanged:: 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 :option:`--with-trace-refs` option), which introduces the only ABI incompatibility.
.. cmdoption:: --with-pydebug :ref:`Build Python in debug mode <debug-build>`: define the ``Py_DEBUG`` macro (disabled by default).
.. cmdoption:: --with-trace-refs Enable tracing references for debugging purpose (disabled by default). Effects: * Define the ``Py_TRACE_REFS`` macro. * Add :func:`sys.getobjects` function. * Add :envvar:`PYTHONDUMPREFS` environment variable. This build is not ABI compatible with release build (default build) or debug build (``Py_DEBUG`` and ``Py_REF_DEBUG`` macros). .. versionadded:: 3.8
.. cmdoption:: --with-assertions Build with C assertions enabled (default is no): ``assert(...);`` and ``_PyObject_ASSERT(...);``. If set, the ``NDEBUG`` macro is not defined in the :envvar:`OPT` compiler variable. See also the :option:`--with-pydebug` option (:ref:`debug build <debug-build>`) which also enables assertions. .. versionadded:: 3.6
.. cmdoption:: --with-valgrind Enable Valgrind support (default is no).
.. cmdoption:: --with-dtrace Enable DTrace support (default is no). See :ref:`Instrumenting CPython with DTrace and SystemTap <instrumentation>`. .. versionadded:: 3.6
.. cmdoption:: --with-address-sanitizer Enable AddressSanitizer memory error detector, ``asan`` (default is no). .. versionadded:: 3.6
.. cmdoption:: --with-memory-sanitizer Enable MemorySanitizer allocation error detector, ``msan`` (default is no). .. versionadded:: 3.6
.. cmdoption:: --with-undefined-behavior-sanitizer Enable UndefinedBehaviorSanitizer undefined behaviour detector, ``ubsan`` (default is no). .. versionadded:: 3.6
.. cmdoption:: --enable-shared Enable building a shared Python library: ``libpython`` (default is no).
.. cmdoption:: --without-static-libpython Do not build ``libpythonMAJOR.MINOR.a`` and do not install ``python.o`` (built and enabled by default). .. versionadded:: 3.10
.. cmdoption:: --with-libs='lib1 ...' Link against additional libraries (default is no).
.. cmdoption:: --with-system-expat Build the :mod:`pyexpat` module using an installed ``expat`` library (default is no).
.. cmdoption:: --with-system-ffi Build the :mod:`_ctypes` extension module using an installed ``ffi`` library, see the :mod:`ctypes` module (default is system-dependent).
.. cmdoption:: --with-system-libmpdec Build the ``_decimal`` extension module using an installed ``mpdec`` library, see the :mod:`decimal` module (default is no). .. versionadded:: 3.3
.. cmdoption:: --with-readline=editline Use ``editline`` library for backend of the :mod:`readline` module. Define the ``WITH_EDITLINE`` macro. .. versionadded:: 3.10
.. cmdoption:: --without-readline Don't build the :mod:`readline` module (built by default). Don't define the ``HAVE_LIBREADLINE`` macro. .. versionadded:: 3.10
.. cmdoption:: --with-tcltk-includes='-I...' Override search for Tcl and Tk include files.
.. cmdoption:: --with-tcltk-libs='-L...' Override search for Tcl and Tk libraries.
.. cmdoption:: --with-libm=STRING Override ``libm`` math library to *STRING* (default is system-dependent).
.. cmdoption:: --with-libc=STRING Override ``libc`` C library to *STRING* (default is system-dependent).
.. cmdoption:: --with-openssl=DIR Root of the OpenSSL directory. .. versionadded:: 3.7
.. cmdoption:: --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 :option:`--with-openssl` and
``pkg-config``;
* *DIR*: set an explicit rpath.
.. versionadded:: 3.10
.. cmdoption:: --with-hash-algorithm=[fnv|siphash24] Select hash algorithm for use in ``Python/pyhash.c``: * ``siphash24`` (default). * ``fnv``; .. versionadded:: 3.4
.. cmdoption:: --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2 Built-in hash modules: * ``md5``; * ``sha1``; * ``sha256``; * ``sha512``; * ``sha3`` (with shake); * ``blake2``. .. versionadded:: 3.9
.. cmdoption:: --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 :mod:`ssl` module.
.. versionadded:: 3.7
.. versionchanged:: 3.10
The settings ``python`` and *STRING* also set TLS 1.2 as minimum
protocol version.
See Mac/README.rst.
.. cmdoption:: --enable-universalsdk
.. cmdoption:: --enable-universalsdk=SDKDIR Create a universal binary build. *SDKDIR* specifies which macOS SDK should be used to perform the build (default is no).
.. cmdoption:: --enable-framework
.. cmdoption:: --enable-framework=INSTALLDIR Create a Python.framework rather than a traditional Unix install. Optional *INSTALLDIR* specifies the installation path (default is no).
.. cmdoption:: --with-universal-archs=ARCH Specify the kind of universal binary that should be created. This option is only valid when :option:`--enable-universalsdk` is set. Options: * ``universal2``; * ``32-bit``; * ``64-bit``; * ``3-way``; * ``intel``; * ``intel-32``; * ``intel-64``; * ``all``.
.. cmdoption:: --with-framework-name=FRAMEWORK Specify the name for the python framework on macOS only valid when :option:`--enable-framework` is set (default: ``Python``).
- :file:`configure.ac` => :file:`configure`;
- :file:`Makefile.pre.in` => :file:`Makefile` (created by :file:`configure`);
- :file:`pyconfig.h` (created by :file:`configure`);
- :file:`Modules/Setup`: C extensions built by the Makefile using :file:`Module/makesetup` shell script;
- :file:`setup.py`: C extensions built using the :mod:`distutils` module.
- C files (
.c) are built as object files (.o). - A static
libpythonlibrary (.a) is created from objects files. python.oand the staticlibpythonlibrary are linked into the finalpythonprogram.- C extensions are built by the Makefile (see :file:`Modules/Setup`)
and
python setup.py build.
make: Build Python with the standard library.make platform:: build thepythonprogram, but don't build the standard library extension modules.make profile-opt: build Python using Profile Guided Optimization (PGO). You can use the configure :option:`--enable-optimizations` option to make this the default target of themakecommand (make allor justmake).make buildbottest: Build Python and run the Python test suite, the same way than buildbots test Python. SetTESTTIMEOUTvariable (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-namesandautoconfmust 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.
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'
:file:`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 :file:`setup.py` script only builds C extensions as shared libraries using the :mod:`distutils` module.
The :c:macro:`PyAPI_FUNC()`, :c:macro:`PyAPI_API()` and
:c:macro:`PyMODINIT_FUNC()` macros of :file:`Include/pyport.h` are defined
differently depending if the Py_BUILD_CORE_MODULE macro is defined:
- Use
Py_EXPORTED_SYMBOLif thePy_BUILD_CORE_MODULEis defined - Use
Py_IMPORTED_SYMBOLotherwise.
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 :exc:`ImportError` on import.
Options set by the ./configure script and environment variables and used by
Makefile.
.. envvar:: CONFIGURE_CPPFLAGS Value of :envvar:`CPPFLAGS` variable passed to the ``./configure`` script. .. versionadded:: 3.6
.. envvar:: CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. ``-I<include dir>`` if you have headers in a nonstandard directory ``<include dir>``. Both :envvar:`CPPFLAGS` and :envvar:`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.
.. envvar:: BASECPPFLAGS .. versionadded:: 3.4
.. envvar:: PY_CPPFLAGS Extra preprocessor flags added for building the interpreter object files. Default: ``$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)``. .. versionadded:: 3.2
.. envvar:: CC C compiler command. Example: ``gcc -pthread``.
.. envvar:: MAINCC C compiler command used to build the ``main()`` function of programs like ``python``. Variable set by the :option:`--with-cxx-main` option of the configure script. Default: ``$(CC)``.
.. envvar:: CXX C++ compiler command. Used if the :option:`--with-cxx-main` option is used. Example: ``g++ -pthread``.
.. envvar:: CFLAGS C compiler flags.
.. envvar:: CFLAGS_NODIST
:envvar:`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 :envvar:`CFLAGS` once Python is installed (:issue:`21121`).
In particular, :envvar:`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
:envvar:`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.
.. versionadded:: 3.5
.. envvar:: EXTRA_CFLAGS Extra C compiler flags.
.. envvar:: CONFIGURE_CFLAGS Value of :envvar:`CFLAGS` variable passed to the ``./configure`` script. .. versionadded:: 3.2
.. envvar:: CONFIGURE_CFLAGS_NODIST Value of :envvar:`CFLAGS_NODIST` variable passed to the ``./configure`` script. .. versionadded:: 3.5
.. envvar:: BASECFLAGS Base compiler flags.
.. envvar:: OPT Optimization flags.
.. envvar:: CFLAGS_ALIASING Strict or non-strict aliasing flags used to compile ``Python/dtoa.c``. .. versionadded:: 3.7
.. envvar:: CCSHARED Compiler flags used to build a shared library. For example, ``-fPIC`` is used on Linux and on BSD.
.. envvar:: CFLAGSFORSHARED Extra C flags added for building the interpreter object files. Default: ``$(CCSHARED)`` when :option:`--enable-shared` is used, or an empty string otherwise.
.. envvar:: PY_CFLAGS Default: ``$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)``.
.. envvar:: PY_CFLAGS_NODIST Default: ``$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal``. .. versionadded:: 3.5
.. envvar:: PY_STDMODULE_CFLAGS C flags used for building the interpreter object files. Default: ``$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)``. .. versionadded:: 3.7
.. envvar:: PY_CORE_CFLAGS Default: ``$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE``. .. versionadded:: 3.2
.. envvar:: PY_BUILTIN_MODULE_CFLAGS Compiler flags to build a standard library extension module as a built-in module, like the :mod:`posix` module. Default: ``$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN``. .. versionadded:: 3.8
.. envvar:: PURIFY Purify command. Purify is a memory debugger program. Default: empty string (not used).
.. envvar:: LINKCC Linker command used to build programs like ``python`` and ``_testembed``. Default: ``$(PURIFY) $(MAINCC)``.
.. envvar:: CONFIGURE_LDFLAGS Value of :envvar:`LDFLAGS` variable passed to the ``./configure`` script. Avoid assigning :envvar:`CFLAGS`, :envvar:`LDFLAGS`, etc. so users can use them on the command line to append to these values without stomping the pre-set values. .. versionadded:: 3.2
.. envvar:: LDFLAGS_NODIST
:envvar:`LDFLAGS_NODIST` is used in the same manner as
:envvar:`CFLAGS_NODIST`. Use it when a linker flag should *not* be part of
the distutils :envvar:`LDFLAGS` once Python is installed (:issue:`35257`).
In particular, :envvar:`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
:envvar:`LDFLAGS` would take precedence over user- and package-supplied ``-L``
flags.
.. envvar:: CONFIGURE_LDFLAGS_NODIST Value of :envvar:`LDFLAGS_NODIST` variable passed to the ``./configure`` script. .. versionadded:: 3.8
.. envvar:: LDFLAGS Linker flags, e.g. ``-L<lib dir>`` if you have libraries in a nonstandard directory ``<lib dir>``. Both :envvar:`CPPFLAGS` and :envvar:`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.
.. envvar:: LIBS Linker flags to pass libraries to the linker when linking the Python executable. Example: ``-lrt``.
.. envvar:: LDSHARED Command to build a shared library. Default: ``@LDSHARED@ $(PY_LDFLAGS)``.
.. envvar:: BLDSHARED Command to build ``libpython`` shared library. Default: ``@BLDSHARED@ $(PY_CORE_LDFLAGS)``.
.. envvar:: PY_LDFLAGS Default: ``$(CONFIGURE_LDFLAGS) $(LDFLAGS)``.
.. envvar:: PY_LDFLAGS_NODIST Default: ``$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)``. .. versionadded:: 3.8
.. envvar:: PY_CORE_LDFLAGS Linker flags used for building the interpreter object files. .. versionadded:: 3.8