3. Configurar o Python¶
3.1. Opções de configuração¶
Liste todas as opções do ./configure
usando:
./configure --help
Veja também o Misc/SpecialBuilds.txt
na distribuição fonte do Python.
3.1.1. Opções gerais¶
- --enable-loadable-sqlite-extensions¶
Oferece suporte a extensões carregáveis no módulo de extensão
_sqlite
(desabilitado por padrão).Veja o método
sqlite3.Connection.enable_load_extension()
do módulosqlite3
.Novo na versão 3.6.
- --disable-ipv6¶
Desabilita suporte a IPv6 (habilitado por padrão se houver suporte), veja o módulo
socket
.
- --enable-big-digits=[15|30]¶
Define o tamanho em bits dos dígitos de
int
do Python: 15 ou 30 bits.Por padrão, o tamanho dos dígitos é 30.
Define o
PYLONG_BITS_IN_DIGIT
para15
ou30
.
- --with-cxx-main¶
- --with-cxx-main=COMPILER¶
Compila a função
main()
do Python e vincula o executável do Python ao compilador C++:$CXX
ou COMPILER se especificado.
- --with-suffix=SUFFIX¶
Define o sufixo do executável do Python para SUFFIX.
O sufixo padrão é
.exe
no Windows e macOS (executávelpython.exe
),.js
em nó Emscripten,.html
em navegador Emscripten,.wasm
em WASI e uma string vazia em outras plataformas (executávelpython
).Alterado na versão 3.11: O sufixo padrão na plataforma WASM é um entre
.js
,.html
ou.wasm
- --with-tzpath=<list of absolute paths separated by pathsep>¶
Select the default time zone search path for
zoneinfo.TZPATH
. See the Compile-time configuration of thezoneinfo
module.Padrão:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo
.Veja o separador de caminhos
os.pathsep
.Novo na versão 3.9.
- --without-decimal-contextvar¶
Compila o módulo de extensão
_decimal
usando um contexto local de thread ao invés de um contexto local de corrotina (padrão), veja o módulodecimal
.See
decimal.HAVE_CONTEXTVAR
and thecontextvars
module.Novo na versão 3.9.
- --with-dbmliborder=<list of backend names>¶
Substitui a ordem de verificação de backends de banco de dados para o módulo
dbm
Um valor válido é uma string separada por dois pontos (
:
) com os nomes de backend:ndbm
;gdbm
;bdb
.
- --without-c-locale-coercion¶
Desabilita a coerção de localidade C para uma localidade baseada em UTF-8 (ativada por padrão).
Não define a macro
PY_COERCE_C_LOCALE
.Consulte
PYTHONCOERCECLOCALE
e a PEP 538.
- --with-platlibdir=DIRNAME¶
Nome do diretório da biblioteca Python (o padrão é
lib
).Fedora e SuSE usam
lib64
em plataformas de 64 bits.Veja
sys.platlibdir
.Novo na versão 3.9.
- --with-wheel-pkg-dir=PATH¶
Diretório de pacotes de wheel usados pelo módulo
ensurepip
(nenhum por padrão).Algumas políticas de empacotamento de distribuição do Linux recomendam contra o empacotamento de dependências. Por exemplo, o Fedora instala pacotes wheel no diretório
/usr/share/python-wheels/
e não instala o pacoteensurepip._bundled
.Novo na versão 3.10.
- --with-pkg-config=[check|yes|no]¶
Se o configure deve usar pkg-config para detectar dependências de compilação.
check
(padrão): pkg-config é opcionalyes
: pkg-config é obrigatóriono
: configure não usa pkg-config mesmo quando presente
Novo na versão 3.11.
- --enable-pystats¶
Ativa a coleta de estatísticas internas.
As estatísticas serão despejadas em um arquivo arbitrário (provavelmente único) em
/tmp/py_stats/
, ouC:\temp\py_stats\
no Windows.Use
Tools/scripts/summarize_stats.py
para ler as estatísticas.Novo na versão 3.11.
3.1.2. Opções de WebAssembly¶
- --with-emscripten-target=[browser|node]¶
Define o “sabor” de compilação para
wasm32-emscripten
.browser
(padrão): pré-carrega stdlib mínima, MEMFS padrão.node
: suporte a NODERAWFS e pthread.
Novo na versão 3.11.
- --enable-wasm-dynamic-linking¶
Ativa o suporte de vinculação dinâmica para WASM.
A vinculação dinâmica permite
dlopen
. O tamanho do arquivo executável aumenta devido à eliminação limitada de código morto e recursos adicionais.Novo na versão 3.11.
- --enable-wasm-pthreads¶
Ativa o suporte a pthreads para WASM.
Novo na versão 3.11.
3.1.3. Opções de instalação¶
- --prefix=PREFIX¶
Instala arquivos independentes de arquitetura em PREFIX. No Unix, o padrão é
/usr/local
.This value can be retrieved at runtime using
sys.prefix
.Como exemplo, pode-se usar
--prefix="$HOME/.local/"
para instalar um Python em seu diretório pessoal (home).
- --exec-prefix=EPREFIX¶
Instala arquivos dependentes de arquitetura no EPREFIX, o padrão é
--prefix
.This value can be retrieved at runtime using
sys.exec_prefix
.
3.1.4. Opções de desempenho¶
A configuração do Python usando --enable-optimizations --with-lto
(PGO + LTO) é recomendada para melhor desempenho.
- --enable-optimizations¶
Habilita a otimização guiada por perfil (PGO, do inglês Profile Guided Optimization) usando
PROFILE_TASK
(desabilitado por padrão).O compilador C Clang requer o programa
llvm-profdata
para PGO. No macOS, o GCC também exige: o GCC é apenas um apelido para o Clang no macOS.Desabilita também a interposição semântica no libpython se
--enable-shared
e GCC forem usados: adiciona-fno-semantic-interposition
aos sinalizadores do compilador e do vinculador.Novo na versão 3.6.
Alterado na versão 3.10: Usa
-fno-semantic-interposition
no GCC.
- PROFILE_TASK¶
Variável de ambiente usada no Makefile: argumentos de linha de comando do Python para a tarefa de geração de PGO.
Padrão:
-m test --pgo --timeout=$(TESTTIMEOUT)
.Novo na versão 3.8.
- --with-lto=[full|thin|no|yes]¶
Habilita o otimização em tempo de vinculação (LTO, do inglês Link Time Optimization) em qualquer compilação (desabilitado por padrão).
O compilador C Clang requer
llvm-ar
para LTO (ar
no macOS), bem como um vinculador compatível com LTO (ld.gold
oulld
).Novo na versão 3.6.
Novo na versão 3.11: Para usar o recurso ThinLTO, use
--with-lto=thin
no Clang.
- --with-computed-gotos¶
Habilita “gotos” computados no loop de avaliação (habilitado por padrão em compiladores suportados).
- --without-pymalloc¶
Desabilita o alocador de memória Python especializado pymalloc (habilitado por padrão).
Veja também a variável de ambiente
PYTHONMALLOC
.
- --without-doc-strings¶
Desabilita as strings de documentação estática para reduzir o consumo de memória (habilitado por padrão). As strings de documentação definidas em Python não são afetadas.
Não define a macro
WITH_DOC_STRINGS
.Veja a macro
PyDoc_STRVAR()
.
- --enable-profiling¶
Habilita o perfil de código C-level com
gprof
(desabilitado por padrão).
3.1.5. Compilação de depuração do Python¶
Uma compilação de depuração é Python compilada com a opção de configuração --with-pydebug
.
Efeitos de uma compilação de depuração:
Exibe todos os avisos por padrão: a lista de filtros de aviso padrão está vazia no módulo
warnings
.Adiciona
d
asys.abiflags
.Adiciona a função
sys.gettotalrefcount()
.Adiciona a opção de linha de comando
-X showrefcount
.Adiciona a variável de ambiente
PYTHONTHREADDEBUG
.Adiciona suporte para a variável
__lltrace__
: habilita o rastreamento de baixo nível no laço de avaliação de bytecode se a variável estiver definida.Instala ganchos de depuração nos alocadores de memória para detectar estouro de buffer e outros erros de memória.
Define as macros
Py_DEBUG
ePy_REF_DEBUG
.Adiciona verificações de tempo de execução: código cercado por
#ifdef Py_DEBUG
e#endif
. Habilita as asserçõesassert(...)
e_PyObject_ASSERT(...)
: não define a macroNDEBUG
(veja também a configuração--with-assertions
opção). Principais verificações de tempo de execução:Adiciona verificações de sanidade nos argumentos da função.
Objetos Unicode e int são criados com sua memória preenchida com um padrão para detectar o uso de objetos não inicializados.
Garante que as funções que podem limpar ou substituir a exceção atual não sejam chamadas com uma exceção levantada.
Verifica se as funções desalocadoras não alteram a exceção atual.
O coletor de lixo (função
gc.collect()
) executa algumas verificações básicas na consistência dos objetos.A macro
Py_SAFE_DOWNCAST()
verifica o underflow e o overflow de inteiros ao fazer o downcast de tipos largos para tipos estreitos.
Veja também o Modo de Desenvolvimento do Python e a opção de configuração --with-trace-refs
.
Alterado na versão 3.8: Compilações de lançamento e compilações de depuração agora são compatíveis com ABI: definir a macro Py_DEBUG
não implica mais na macro Py_TRACE_REFS
(consulte a opção --with-trace-refs
), que apresenta a única incompatibilidade de ABI.
3.1.6. 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).Novo na versão 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.Novo na versão 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.
Novo na versão 3.6.
- --with-address-sanitizer¶
Enable AddressSanitizer memory error detector,
asan
(default is no).Novo na versão 3.6.
- --with-memory-sanitizer¶
Enable MemorySanitizer allocation error detector,
msan
(default is no).Novo na versão 3.6.
- --with-undefined-behavior-sanitizer¶
Enable UndefinedBehaviorSanitizer undefined behaviour detector,
ubsan
(default is no).Novo na versão 3.6.
3.1.7. Linker options¶
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).Novo na versão 3.10.
3.1.8. 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).Novo na versão 3.3.
- --with-readline=editline¶
Use
editline
library for backend of thereadline
module.Define the
WITH_EDITLINE
macro.Novo na versão 3.10.
- --without-readline¶
Don’t build the
readline
module (built by default).Don’t define the
HAVE_LIBREADLINE
macro.Novo na versão 3.10.
- --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.
Novo na versão 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.
Novo na versão 3.10.
3.1.9. Security Options¶
- --with-hash-algorithm=[fnv|siphash13|siphash24]¶
Select hash algorithm for use in
Python/pyhash.c
:siphash13
(default);siphash24
;fnv
.
Novo na versão 3.4.
Novo na versão 3.11:
siphash13
is added and it is the new default.
- --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2¶
Built-in hash modules:
md5
;sha1
;sha256
;sha512
;sha3
(with shake);blake2
.
Novo na versão 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.Novo na versão 3.7.
Alterado na versão 3.10: The settings
python
and STRING also set TLS 1.2 as minimum protocol version.
3.1.10. macOS Options¶
See Mac/README.rst
.
- --enable-universalsdk¶
- --enable-universalsdk=SDKDIR¶
Create a universal binary build. SDKDIR specifies which macOS SDK should be used to perform the build (default is no).
- --enable-framework¶
- --enable-framework=INSTALLDIR¶
Create a Python.framework rather than a traditional Unix install. Optional INSTALLDIR specifies the installation path (default is no).
- --with-universal-archs=ARCH¶
Specify the kind of universal binary that should be created. This option is only valid when
--enable-universalsdk
is set.Options:
universal2
;32-bit
;64-bit
;3-way
;intel
;intel-32
;intel-64
;all
.
- --with-framework-name=FRAMEWORK¶
Specify the name for the python framework on macOS only valid when
--enable-framework
is set (default:Python
).
3.1.11. Cross Compiling Options¶
Cross compiling, also known as cross building, can be used to build Python for another CPU architecture or platform. Cross compiling requires a Python interpreter for the build platform. The version of the build Python must match the version of the cross compiled host Python.
- --build=BUILD¶
configure for building on BUILD, usually guessed by config.guess.
- --host=HOST¶
cross-compile to build programs to run on HOST (target platform)
- --with-build-python=path/to/python¶
path to build
python
binary for cross compilingNovo na versão 3.11.
- CONFIG_SITE=file¶
An environment variable that points to a file with configure overrides.
Example config.site file:
# config.site-aarch64 ac_cv_buggy_getaddrinfo=no ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no
Cross compiling example:
CONFIG_SITE=config.site-aarch64 ../configure \
--build=x86_64-pc-linux-gnu \
--host=aarch64-unknown-linux-gnu \
--with-build-python=../x86_64/python
3.2. Python Build System¶
3.2.1. Main files of the build system¶
configure.ac
=>configure
;Makefile.pre.in
=>Makefile
(created byconfigure
);pyconfig.h
(created byconfigure
);Modules/Setup
: C extensions built by the Makefile usingModule/makesetup
shell script;setup.py
: C extensions built using thedistutils
module.
3.2.2. Main build steps¶
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 extensions 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_DATA()
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¶
- CONFIGURE_CPPFLAGS¶
Value of
CPPFLAGS
variable passed to the./configure
script.Novo na versão 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
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¶
Novo na versão 3.4.
- PY_CPPFLAGS¶
Extra preprocessor flags added for building the interpreter object files.
Default:
$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)
.Novo na versão 3.2.
3.3.2. Compiler flags¶
- CC¶
C compiler command.
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 compiler flags.
- 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.
Novo na versão 3.5.
- EXTRA_CFLAGS¶
Extra C compiler flags.
- CONFIGURE_CFLAGS_NODIST¶
Value of
CFLAGS_NODIST
variable passed to the./configure
script.Novo na versão 3.5.
- BASECFLAGS¶
Base compiler flags.
- OPT¶
Optimization flags.
- CFLAGS_ALIASING¶
Strict or non-strict aliasing flags used to compile
Python/dtoa.c
.Novo na versão 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
.Novo na versão 3.5.
- PY_STDMODULE_CFLAGS¶
C flags used for building the interpreter object files.
Default:
$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)
.Novo na versão 3.7.
- PY_CORE_CFLAGS¶
Default:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE
.Novo na versão 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
.Novo na versão 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.Novo na versão 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.Novo na versão 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)
.Novo na versão 3.8.
- PY_CORE_LDFLAGS¶
Linker flags used for building the interpreter object files.
Novo na versão 3.8.