3. Configurar o Python¶
3.1. Requisitos de construção¶
Features and minimum versions required to build CPython:
Um compilador C11. Não são necessários recursos opcionais do C11.
No Windows, é necessário o Microsoft Visual Studio 2017 ou posterior.
Suporte para números de ponto flutuante do IEEE 754 e Not-a-Number (NaN) de ponto flutuante.
Suporte a threads.
OpenSSL 1.1.1 is the minimum version and OpenSSL 3.0.9 is the recommended minimum version for the
ssl
andhashlib
extension modules.SQLite 3.15.2 for the
sqlite3
extension module.Tcl/Tk 8.5.12 for the
tkinter
module.Autoconf 2.71 and aclocal 1.16.4 are required to regenerate the
configure
script.
Alterado na versão 3.1: Tcl/Tk version 8.3.1 is now required.
Alterado na versão 3.5: On Windows, Visual Studio 2015 or later is now required. Tcl/Tk version 8.4 is now required.
Alterado na versão 3.6: Recursos selecionados do C99 agora são necessários, como funções <stdint.h>
e static inline
.
Alterado na versão 3.7: Suporte a threads e OpenSSL 1.0.2 agora são necessários.
Alterado na versão 3.10: OpenSSL 1.1.1 is now required. Require SQLite 3.7.15.
Alterado na versão 3.11: C11 compiler, IEEE 754 and NaN support are now required.
On Windows, Visual Studio 2017 or later is required.
Tcl/Tk version 8.5.12 is now required for the tkinter
module.
Alterado na versão 3.13: Autoconf 2.71, aclocal 1.16.4 and SQLite 3.15.2 are now required.
Veja também PEP 7 “Guia de estilo para código C” e PEP 11 “Suporte do CPython a plataformas”.
3.2. Arquivos gerados¶
Para reduzir as dependências de construção, o código-fonte do Python contém vários arquivos gerados. Comandos para regenerar todos os arquivos gerados:
make regen-all
make regen-stdlib-module-names
make regen-limited-abi
make regen-configure
O arquivo Makefile.pre.in
documenta os arquivos gerados, suas entradas e ferramentas usadas para regenerá-los. Procure por alvos regen-*
de make.
3.2.1. Script configure¶
O comando make regen-configure
regera o arquivo aclocal.m4
e o script configure
usando o shell script Tools/build/regen-configure.sh
, o qual usa um contêiner Ubuntu para obter as mesmas versões de ferramentas e ter uma saída reproduzível.
O contêiner é opcional, o seguinte comando pode ser executado localmente:
autoreconf -ivf -Werror
Os arquivos gerados podem mudar dependendo das versões exatas do autoconf-archive
, aclocal
e pkg-config
.
3.3. Opções de configuração¶
List all configure
script options using:
./configure --help
Veja também o Misc/SpecialBuilds.txt
na distribuição de código-fonte do Python.
3.3.1. Opções gerais¶
- --enable-loadable-sqlite-extensions¶
Suporte a extensões carregáveis no módulo de extensão
_sqlite
(o padrão é não) do módulosqlite3
.Veja o método
sqlite3.Connection.enable_load_extension()
do módulosqlite3
.Adicionado 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-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>¶
Seleciona o caminho de pesquisa de fuso horário padrão para
zoneinfo.TZPATH
. Veja a Configuração de tempo de compilação do módulozoneinfo
.Padrão:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo
.Veja o separador de caminhos
os.pathsep
.Adicionado na versão 3.9.
- --without-decimal-contextvar¶
Constrói 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
.Veja
decimal.HAVE_CONTEXTVAR
e o módulocontextvars
.Adicionado 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.
- --without-freelists¶
Desabilita todas as listas livres, exceto o singleton de tupla vazia.
Adicionado na versão 3.11.
- --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
.Adicionado 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
.Adicionado na versão 3.10.
- --with-pkg-config=[check|yes|no]¶
Se o configure deve usar pkg-config para detectar dependências de construção.
check
(padrão): pkg-config é opcionalyes
: pkg-config é obrigatóriono
: configure não usa pkg-config mesmo quando presente
Adicionado na versão 3.11.
- --enable-pystats¶
Turn on internal Python performance statistics gathering.
By default, statistics gathering is off. Use
python3 -X pystats
command or setPYTHONSTATS=1
environment variable to turn on statistics gathering at Python startup.At Python exit, dump statistics if statistics gathering was on and not cleared.
Efeitos:
Add
-X pystats
command line option.Add
PYTHONSTATS
environment variable.Define the
Py_STATS
macro.Add functions to the
sys
module:sys._stats_on()
: Turns on statistics gathering.sys._stats_off()
: Turns off statistics gathering.sys._stats_clear()
: Clears the statistics.sys._stats_dump()
: Dump statistics to file, and clears the statistics.
The statistics will be dumped to a arbitrary (probably unique) file in
/tmp/py_stats/
(Unix) orC:\temp\py_stats\
(Windows). If that directory does not exist, results will be printed on stderr.Use
Tools/scripts/summarize_stats.py
para ler as estatísticas.Statistics:
Opcode:
Specialization: success, failure, hit, deferred, miss, deopt, failures;
Execution count;
Pair count.
Call:
Inlined Python calls;
PyEval calls;
Frames pushed;
Frame object created;
Eval calls: vector, generator, legacy, function VECTORCALL, build class, slot, function “ex”, API, method.
Object:
incref and decref;
interpreter incref and decref;
allocations: all, 512 bytes, 4 kiB, big;
free;
to/from free lists;
dictionary materialized/dematerialized;
type cache;
optimization attempts;
optimization traces created/executed;
uops executed.
Garbage collector:
Garbage collections;
Objects visited;
Objects collected.
Adicionado na versão 3.11.
- --disable-gil¶
Enables experimental support for running Python without the global interpreter lock (GIL): free threading build.
Defines the
Py_GIL_DISABLED
macro and adds"t"
tosys.abiflags
.See PEP 703 “Making the Global Interpreter Lock Optional in CPython”.
Adicionado na versão 3.13.
- PKG_CONFIG¶
Path to
pkg-config
utility.
- PKG_CONFIG_LIBDIR¶
- PKG_CONFIG_PATH¶
pkg-config
options.
3.3.2. C compiler options¶
- CC¶
C compiler command.
- CFLAGS¶
C compiler flags.
- CPP¶
C preprocessor command.
- CPPFLAGS¶
C preprocessor flags, e.g.
-Iinclude_dir
.
3.3.3. Opções da ligação¶
- LDFLAGS¶
Linker flags, e.g.
-Llibrary_directory
.
- LIBS¶
Libraries to pass to the linker, e.g.
-llibrary
.
- MACHDEP¶
Name for machine-dependent library files.
3.3.4. Options for third-party dependencies¶
Adicionado na versão 3.11.
- BZIP2_CFLAGS¶
- BZIP2_LIBS¶
C compiler and linker flags to link Python to
libbz2
, used bybz2
module, overridingpkg-config
.
- CURSES_CFLAGS¶
- CURSES_LIBS¶
C compiler and linker flags for
libncurses
orlibncursesw
, used bycurses
module, overridingpkg-config
.
- GDBM_CFLAGS¶
- GDBM_LIBS¶
C compiler and linker flags for
gdbm
.
- LIBB2_CFLAGS¶
- LIBB2_LIBS¶
C compiler and linker flags for
libb2
(BLAKE2), used byhashlib
module, overridingpkg-config
.
- LIBEDIT_CFLAGS¶
- LIBEDIT_LIBS¶
C compiler and linker flags for
libedit
, used byreadline
module, overridingpkg-config
.
- LIBFFI_CFLAGS¶
- LIBMPDEC_CFLAGS¶
- LIBMPDEC_LIBS¶
C compiler and linker flags for
libmpdec
, used bydecimal
module, overridingpkg-config
.Nota
These environment variables have no effect unless
--with-system-libmpdec
is specified.
- LIBLZMA_CFLAGS¶
- LIBREADLINE_CFLAGS¶
- LIBREADLINE_LIBS¶
C compiler and linker flags for
libreadline
, used byreadline
module, overridingpkg-config
.
- LIBSQLITE3_CFLAGS¶
- LIBSQLITE3_LIBS¶
C compiler and linker flags for
libsqlite3
, used bysqlite3
module, overridingpkg-config
.
- LIBUUID_CFLAGS¶
- PANEL_CFLAGS¶
- PANEL_LIBS¶
C compiler and Linker flags for PANEL, overriding
pkg-config
.C compiler and linker flags for
libpanel
orlibpanelw
, used bycurses.panel
module, overridingpkg-config
.
- TCLTK_CFLAGS¶
- TCLTK_LIBS¶
C compiler and linker flags for TCLTK, overriding
pkg-config
.
- ZLIB_CFLAGS¶
3.3.5. Opções de WebAssembly¶
- --with-emscripten-target=[browser|node]¶
Define o “sabor” de construção para
wasm32-emscripten
.browser
(padrão): pré-carrega stdlib mínima, MEMFS padrão.node
: suporte a NODERAWFS e pthread.
Adicionado 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.Adicionado na versão 3.11.
- --enable-wasm-pthreads¶
Ativa o suporte a pthreads para WASM.
Adicionado na versão 3.11.
3.3.6. Opções de instalação¶
- --prefix=PREFIX¶
Instala arquivos independentes de arquitetura em PREFIX. No Unix, o padrão é
/usr/local
.Este valor pode ser recuperado em tempo de execução usando
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
.Este valor pode ser recuperado em tempo de execução usando
sys.exec_prefix
.
3.3.7. Opções de desempenho¶
Configurar o Python usando --enable-optimizations --with-lto
(PGO + LTO) é o recomendado para melhor desempenho. O sinalizador experimental --enable-bolt
também pode ser usado para melhorar o 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.Nota
During the build, you may encounter compiler warnings about profile data not being available for some source files. These warnings are harmless, as only a subset of the code is exercised during profile data acquisition. To disable these warnings on Clang, manually suppress them by adding
-Wno-profile-instr-unprofiled
toCFLAGS
.Adicionado 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)
.Adicionado na versão 3.8.
Alterado na versão 3.13: Task failure is no longer ignored silently.
- --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
).Adicionado na versão 3.6.
Adicionado na versão 3.11: Para usar o recurso ThinLTO, use
--with-lto=thin
no Clang.Alterado na versão 3.12: Usa ThinLTO como política de otimização padrão no Clang se o compilador aceitar o sinalizador.
- --enable-bolt¶
Habilita o uso do otimizador binário pós-vinculação BOLT (desabilitado por padrão).
BOLT faz parte do projeto LLVM, mas nem sempre está incluído em suas distribuições binárias. Este sinalizador requer que
llvm-bolt
emerge-fdata
estejam disponíveis.BOLT ainda é um projeto relativamente novo, então este sinalizador deve ser considerado experimental por enquanto. Como esta ferramenta opera em código de máquina, seu sucesso depende de uma combinação do ambiente de construção + os outros argumentos de configuração de otimização + a arquitetura da CPU, e nem todas as combinações são suportadas. Versões do BOLT anteriores ao LLVM 16 são conhecidas por travar o BOLT em alguns cenários. O uso do LLVM 16 ou mais recente para otimização do BOLT é fortemente incentivado.
As variáveis
BOLT_INSTRUMENT_FLAGS
eBOLT_APPLY_FLAGS
do configure podem ser definidas para substituir o conjunto padrão de argumentos para llvm-bolt para instrumentar e aplicar dados BOLT aos binários , respectivamente.Adicionado na versão 3.12.
- BOLT_APPLY_FLAGS¶
Arguments to
llvm-bolt
when creating a BOLT optimized binary.Adicionado na versão 3.12.
- BOLT_INSTRUMENT_FLAGS¶
Arguments to
llvm-bolt
when instrumenting binaries.Adicionado na versão 3.12.
- --with-computed-gotos¶
Habilita “gotos” computados no laço de avaliação (habilitado por padrão em compiladores suportados).
- --without-mimalloc¶
Disable the fast mimalloc allocator mimalloc (enabled by default).
Veja também a variável de ambiente
PYTHONMALLOC
.
- --without-pymalloc¶
Desabilita o alocador de memória especializado do Python 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 a nível C com
gprof
(desabilitado por padrão).
- --with-strict-overflow¶
Adiciona
-fstrict-overflow
aos sinalizadores do compilador C (por padrão adicionamos-fno-strict-overflow
).
3.3.8. 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 opção de linha de comando
-d
e a variável de ambientePYTHONDEBUG
para depurar o analisador sintático.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: 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).
3.3.9. Opções de depuração¶
- --with-pydebug¶
Construção de depuração do Python: define a macro
Py_DEBUG
(desabilitada por padrão).
- --with-trace-refs¶
Habilita referências de rastreamento para fins de depuração (desabilitado por padrão).
Efeitos:
Define a macro
Py_TRACE_REFS
.Adiciona a função
sys.getobjects()
.Adiciona a variável de ambiente
PYTHONDUMPREFS
.
The
PYTHONDUMPREFS
environment variable can be used to dump objects and reference counts still alive at Python exit.Statically allocated objects are not traced.
Adicionado na versão 3.8.
Alterado na versão 3.13: This build is now ABI compatible with release build and debug build.
- --with-assertions¶
Constrói com asserções C habilitadas (o padrão é não):
assert(...);
e_PyObject_ASSERT(...);
.Se definido, a macro
NDEBUG
não é definida na variável do compiladorOPT
.Veja também a opção
--with-pydebug
(construção de depuração) que também habilita asserções.Adicionado na versão 3.6.
- --with-valgrind¶
Habilita suporte ao Valgrind (o padrão é não).
- --with-dtrace¶
Habilita suporte ao DTrace (o padrão é não).
Veja Instrumentando o CPython com DTrace e SystemTap.
Adicionado na versão 3.6.
- --with-address-sanitizer¶
Habilita o detector de erros de memória AddressSanitizer,
asan
(o padrão é não).Adicionado na versão 3.6.
- --with-memory-sanitizer¶
Habilita o detector de erros de alocação do MemorySanitizer,
msan
(o padrão é não).Adicionado na versão 3.6.
- --with-undefined-behavior-sanitizer¶
Habilita o detector de comportamento indefinido UndefinedBehaviorSanitizer,
ubsan
(o padrão é não).Adicionado na versão 3.6.
- --with-thread-sanitizer¶
Enable ThreadSanitizer data race detector,
tsan
(default is no).Adicionado na versão 3.13.
3.3.10. Opções da ligação¶
Habilita a construção de uma biblioteca Python compartilhada:
libpython
(o padrão é não).
- --without-static-libpython¶
Não constrói
libpythonMAJOR.MINOR.a
e não instalapython.o
(construído e habilitado por padrão).Adicionado na versão 3.10.
3.3.11. Opções da biblioteca¶
- --with-libs='lib1 ...'¶
Vincula bibliotecas adicionais (o padrão é não).
- --with-system-expat¶
Constrói o módulo
pyexpat
usando uma bibliotecaexpat
instalada (o padrão é não).
- --with-system-libmpdec¶
Constrói o módulo de extensão
_decimal
usando uma bibliotecampdec
instalada, veja o módulodecimal
(o padrão é não).Adicionado na versão 3.3.
Ver também
- --with-readline=readline|editline¶
Designate a backend library for the
readline
module.readline: Use readline as the backend.
editline: Use editline as the backend.
Adicionado na versão 3.10.
- --without-readline¶
Não constrói o módulo
readline
(construído por padrão).Não define a macro
HAVE_LIBREADLINE
.Adicionado na versão 3.10.
- --with-libm=STRING¶
Substitui a biblioteca matemática
libm
por STRING (o padrão depende do sistema).
- --with-libc=STRING¶
Substitui a biblioteca C
libc
por STRING (o padrão depende do sistema).
- --with-openssl=DIR¶
Raiz do diretório OpenSSL.
Adicionado na versão 3.7.
- --with-openssl-rpath=[no|auto|DIR]¶
Define o diretório da biblioteca de tempo de execução (rpath) para bibliotecas OpenSSL:
no
(padrão): não define o rpath;auto
: detecta automaticamente o rpath de--with-openssl
epkg-config
;DIR: define um rpath explícito.
Adicionado na versão 3.10.
3.3.12. Opções de segurança¶
- --with-hash-algorithm=[fnv|siphash13|siphash24]¶
Seleciona o algoritmo de hash para usar em
Python/pyhash.c
:siphash13
(padrão);siphash24
;fnv
.
Adicionado na versão 3.4.
Adicionado na versão 3.11:
siphash13
é adicionado e é o novo padrão.
- --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2¶
Módulos embutidos de hash
md5
;sha1
;sha256
;sha512
;sha3
(com shake);blake2
.
Adicionado na versão 3.9.
- --with-ssl-default-suites=[python|openssl|STRING]¶
Substitui a string dos conjuntos de criptografia padrão do OpenSSL:
python
(padrão): use a seleciona preferida do Python;openssl
: mantém inalterados os padrões do OpenSSL;STRING: usa uma string personalizada
Veja o módulo
ssl
.Adicionado na versão 3.7.
Alterado na versão 3.10: As configurações
python
e STRING também definem TLS 1.2 como versão mínima do protocolo.
3.3.13. Opções do macOS¶
See Mac/README.rst.
- --enable-universalsdk¶
- --enable-universalsdk=SDKDIR¶
Cria uma construção binária universal. SDKDIR especifica qual SDK do macOS deve ser usado para executar a construção (o padrão é não).
- --enable-framework¶
- --enable-framework=INSTALLDIR¶
Cria um Python.framework em vez de uma instalação tradicional do Unix. O INSTALLDIR opcional especifica o caminho de instalação (o padrão é não).
- --with-universal-archs=ARCH¶
Especifica o tipo de binário universal que deve ser criado. Esta opção só é válida quando
--enable-universalsdk
está definido.Opções:
universal2
;32-bit
;64-bit
;3-way
;intel
;intel-32
;intel-64
;all
.
- --with-framework-name=FRAMEWORK¶
Especifica o nome do framework python no macOS válido apenas quando
--enable-framework
está definido (padrão:Python
).
3.3.14. iOS Options¶
See iOS/README.rst.
- --enable-framework=INSTALLDIR¶
Create a Python.framework. Unlike macOS, the INSTALLDIR argument specifying the installation path is mandatory.
- --with-framework-name=FRAMEWORK¶
Specify the name for the framework (default:
Python
).
3.3.15. Opções de compilação cruzada¶
A compilação cruzada, também conhecida como construção cruzada, pode ser usada para construir Python para outra arquitetura ou plataforma de CPU. A compilação cruzada requer um interpretador Python para a plataforma de construção. A versão do Python para construção deve corresponder à versão do Python da compilação cruzada do host.
- --build=BUILD¶
configura para construir em BUILD, geralmente adivinhado por config.guess.
- --host=HOST¶
faz compilação cruzada para construir programas para executar no HOST (plataforma de destino)
- --with-build-python=path/to/python¶
caminho para construir o binário
python
para compilação cruzadaAdicionado na versão 3.11.
- CONFIG_SITE=file¶
Uma variável de ambiente que aponta para um arquivo com substituições de configuração.
Exemplo de arquivo config.site:
# config.site-aarch64 ac_cv_buggy_getaddrinfo=no ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no
- HOSTRUNNER¶
Program to run CPython for the host platform for cross-compilation.
Adicionado na versão 3.11.
Exemplo de compilação cruzada:
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. Sistema de Construção Python¶
3.4.1. Arquivos principais do sistema de construção¶
configure.ac
=>configure
;Makefile.pre.in
=>Makefile
(criado porconfigure
);pyconfig.h
(criado porconfigure
);Modules/Setup
: Extensões C construídas pelo Makefile usando o shell scriptModule/makesetup
;
3.4.2. Principais etapas de construção¶
Arquivos C (
.c
) são construídos como arquivos objeto (.o
).A static
libpython
library (.a
) is created from objects files.python.o
e a biblioteca estáticalibpython
estão vinculadas ao programa finalpython
.C extensions are built by the Makefile (see
Modules/Setup
).
3.4.3. Main Makefile targets¶
3.4.3.1. make¶
For the most part, when rebuilding after editing some code or
refreshing your checkout from upstream, all you need to do is execute
make
, which (per Make’s semantics) builds the default target, the
first one defined in the Makefile. By tradition (including in the
CPython project) this is usually the all
target. The
configure
script expands an autoconf
variable,
@DEF_MAKE_ALL_RULE@
to describe precisely which targets make
all
will build. The three choices are:
profile-opt
(configured with--enable-optimizations
)build_wasm
(configured with--with-emscripten-target
)build_all
(configured without explicitly using either of the others)
Depending on the most recent source file changes, Make will rebuild
any targets (object files and executables) deemed out-of-date,
including running configure
again if necessary. Source/target
dependencies are many and maintained manually however, so Make
sometimes doesn’t have all the information necessary to correctly
detect all targets which need to be rebuilt. Depending on which
targets aren’t rebuilt, you might experience a number of problems. If
you have build or test problems which you can’t otherwise explain,
make clean && make
should work around most dependency problems, at
the expense of longer build times.
3.4.3.2. make platform¶
Build the python
program, but don’t build the standard library
extension modules. This generates a file named platform
which
contains a single line describing the details of the build platform,
e.g., macosx-14.3-arm64-3.12
or linux-x86_64-3.13
.
3.4.3.3. 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
).
3.4.3.4. make clean¶
Remove built files.
3.4.3.5. make distclean¶
In addition to the the work done by make clean
, remove files
created by the configure script. configure
will have to be run
before building again. [1]
3.4.3.6. make install¶
Build the all
target and install Python.
3.4.3.7. make test¶
Build the all
target and run the Python test suite with the
--fast-ci
option. Variables:
TESTOPTS
: additional regrtest command-line options.TESTPYTHONOPTS
: additional Python command-line options.TESTTIMEOUT
: timeout in seconds (default: 10 minutes).
3.4.3.8. make buildbottest¶
This is similar to make test
, but uses the --slow-ci
option and default timeout of 20 minutes, instead of --fast-ci
option.
3.4.3.9. make regen-all¶
Regenerate (almost) all generated files. These include (but are not
limited to) bytecode cases, and parser generator file.
make regen-stdlib-module-names
and autoconf
must be run
separately for the remaining generated files.
3.4.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 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 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.5. Sinalizadores do compilador e do vinculador¶
Options set by the ./configure
script and environment variables and used by
Makefile
.
3.5.1. Preprocessor flags¶
- CONFIGURE_CPPFLAGS¶
Value of
CPPFLAGS
variable passed to the./configure
script.Adicionado na versão 3.6.
- CPPFLAGS¶
(Objective) C/C++ preprocessor flags, e.g.
-Iinclude_dir
if you have headers in a nonstandard directory include_dir.Both
CPPFLAGS
andLDFLAGS
need to contain the shell’s value to be able to build extension modules using the directories specified in the environment variables.
- BASECPPFLAGS¶
Adicionado 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)
.Adicionado na versão 3.2.
3.5.2. Compiler flags¶
- CC¶
C compiler command.
Example:
gcc -pthread
.
- CXX¶
C++ compiler command.
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 ofCFLAGS
once Python is installed (gh-65320).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.
Adicionado na versão 3.5.
- COMPILEALL_OPTS¶
Options passed to the
compileall
command line when building PYC files inmake install
. Default:-j0
.Adicionado na versão 3.12.
- EXTRA_CFLAGS¶
Extra C compiler flags.
- CONFIGURE_CFLAGS¶
Value of
CFLAGS
variable passed to the./configure
script.Adicionado na versão 3.2.
- CONFIGURE_CFLAGS_NODIST¶
Value of
CFLAGS_NODIST
variable passed to the./configure
script.Adicionado 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
.Adicionado 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
.Adicionado 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)
.Adicionado na versão 3.7.
- PY_CORE_CFLAGS¶
Default:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE
.Adicionado 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
.Adicionado na versão 3.8.
- PURIFY¶
Purify command. Purify is a memory debugger program.
Default: empty string (not used).
3.5.3. Sinalizadores do vinculador¶
- LINKCC¶
Comando do vinculador usado para construir programas como
python
e_testembed
.Default:
$(PURIFY) $(CC)
.
- 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.Adicionado na versão 3.2.
- LDFLAGS_NODIST¶
LDFLAGS_NODIST
é usado da mesma maneira queCFLAGS_NODIST
. Use-o quando um sinalizador de vinculador não fizer parte deLDFLAGS
depois que o Python estiver instalado (gh-65320).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.Adicionado na versão 3.8.
- LDFLAGS¶
Sinalizadores do vinculador, p.ex.
-Llib_dir
, se você tiver bibliotecas em um diretório não padrão lib_dir.Both
CPPFLAGS
andLDFLAGS
need to contain the shell’s value to be able to build extension modules using the directories specified in the environment variables.
- LIBS¶
Sinalizadores do vinculador para passar bibliotecas para o vinculador ao vincular o executável Python.
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)
.Adicionado na versão 3.8.
- PY_CORE_LDFLAGS¶
Sinalizadores de vinculador usados para construir os arquivos de objeto do interpretador.
Adicionado na versão 3.8.
Footnotes