3. Configurar o Python¶
3.1. Requisitos de construção¶
Recursos e versões mínimas necessários para construir o 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 é a versão mínima e OpenSSL 3.0.9 é a versão mínima recomendada para os módulos de extensão
ssl
ehashlib
.SQLite 3.15.2 para o módulo de extensão
sqlite3
.Tcl/Tk 8.5.12 para o módulo
tkinter
.Autoconf 2.71 e aclocal 1.16.5 são necessários para regenerar o script
configure
.
Alterado na versão 3.1: Agora é necessária a versão 8.3.1 do Tcl/Tk.
Alterado na versão 3.5: No Windows, agora é necessário o Visual Studio 2015 ou posterior. Agora é necessária a versão 8.4 do Tcl/Tk.
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 agora é necessário. Requer SQLite 3.7.15.
Alterado na versão 3.11: Compilador C11, suporte a IEEE 754 e NaN agora são necessários. No Windows, é necessário o Visual Studio 2017 ou posterior. A versão 8.5.12 do Tcl/Tk agora é necessária para o módulo tkinter
.
Alterado na versão 3.13: Autoconf 2.71, aclocal 1.16.5 e SQLite 3.15.2 agora são necessários.
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¶
Liste todas as opções do configure
usando:
./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¶
Ativa a coleta de estatísticas internas de desempenho do Python.
Por padrão, a coleta de estatísticas está desativada. Use o comando
python3 -X pystats
ou defina a variável de ambientePYTHONSTATS=1
para ativar a coleta de estatísticas na inicialização do Python.Na saída do Python, despeja as estatísticas se a coleta de estatísticas estiver ativada e não apagada.
Efeitos:
Adiciona a opção de linha de comando
-X pystats
.Adiciona a variável de ambiente
PYTHONSTATS
.Define a macro
Py_STATS
.Adiciona funções ao módulo
sys
:sys._stats_on()
: Ativa a coleta de estatísticas.sys._stats_off()
: Desativa a coleta de estatísticas.sys._stats_clear()
: Apaga as estatísticas.sys._stats_dump()
: Despeja as estatísticas no arquivo e apaga as estatísticas.
As estatísticas serão despejadas em um arquivo arbitrário (provavelmente único) em
/tmp/py_stats/
(Unix) ouC:\temp\py_stats\
(Windows). Se aquele diretório não existir, os resultados serão enviados para stderr.Use
Tools/scripts/summarize_stats.py
para ler as estatísticas.Estatísticas:
Código de operação:
Especialização: sucesso, fracasso, acerto, adiado, erro, deopt, falhas;
Contagem de execuções;
Contagem em pares.
Chamada:
Chamadas Python em linha;
Chamadas a PyEval;
Quadros enviados;
Objetos quadro criados;
Chamadas de Eval: vetor, gerador, legado, função VECTORCALL, classe de construção, slot, função “ex”, API, método.
Objeto:
incref e decref;
incref e decref do interpretador;
alocações: tudo, 512 bytes, 4 kiB, big;
memória livre;
listas de memória livre para/de;
Dicionário materializado/desmaterializado;
cache de tipo;
tentativas de otimização;
rastros de otimização criados/executados;
uops executados.
Coletor de lixo:
Coletas de lixo;
Objetos visitados;
Objetos coletados.
Adicionado na versão 3.11.
- --disable-gil¶
Habilita suporte experimental para execução de Python sem a trava global do interpretador (GIL): construção de com threads livres.
Define a macro
Py_GIL_DISABLED
e adiciona"t"
asys.abiflags
.Veja CPython com threads livres para mais detalhes.
Adicionado na versão 3.13.
- --enable-experimental-jit=[no|yes|yes-off|interpreter]¶
Indica como integrar o compilador JIT.
no
- constrói o interpretador sem o JIT.yes
- constrói o interpretador com o JIT.yes-off
- constrói o interpretador com o JIT, mas desabilitado por padrão.interpreter
- constrói o interpretador sem o JIT, mas com o interpretador habilitado para nível 2.
Por convenção,
--enable-experimental-jit
é uma abreviação de--enable-experimental-jit=yes
.Adicionado na versão 3.13.
- PKG_CONFIG¶
Caminho para o utilitário
pkg-config
.
- PKG_CONFIG_LIBDIR¶
- PKG_CONFIG_PATH¶
Opções do
pkg-config
.
3.3.2. Opções do compilador C¶
- CC¶
Comando do compilador C.
- CFLAGS¶
Sinalizadores do compilador C.
- CPP¶
Comando do pré-processador C.
- CPPFLAGS¶
Sinalizadores do pré-processador C, p.ex.,
-Iinclude_dir
.
3.3.3. Opções da ligação¶
- LDFLAGS¶
Sinalizadores do vinculador. p.ex.,
-Llibrary_directory
.
- LIBS¶
Bibliotecas para passar para o vinculador, p.ex.
-llibrary
.
- MACHDEP¶
Nome para arquivos de biblioteca dependentes de máquina.
3.3.4. Opções para dependências de terceiros¶
Adicionado na versão 3.11.
- BZIP2_CFLAGS¶
- BZIP2_LIBS¶
Sinalizadores de compilador C e vinculador para vincular Python a
libbz2
, usados pelo módulobz2
, substituindopkg-config
.
- CURSES_CFLAGS¶
- CURSES_LIBS¶
Sinalizadores de compilador C e vinculador para
libncurses
oulibncursesw
, usados pelo módulocurses
, substituindopkg-config
.
- GDBM_CFLAGS¶
- GDBM_LIBS¶
Sinalizadores de compilador C e vinculador para
gdbm
.
- LIBB2_CFLAGS¶
- LIBB2_LIBS¶
Sinalizadores de compilador C e vinculador para
libb2
(BLAKE2), usados pelo módulohashlib
, substituindopkg-config
.
- LIBEDIT_CFLAGS¶
- LIBEDIT_LIBS¶
Sinalizadores de compilador C e vinculador para
libedit
, usados pelo móduloreadline
, substituindopkg-config
.
- LIBFFI_CFLAGS¶
- LIBFFI_LIBS¶
Sinalizadores de compilador C e vinculador para
libffi
, usados pelo móduloctypes
, substituindopkg-config
.
- LIBMPDEC_CFLAGS¶
- LIBMPDEC_LIBS¶
Sinalizadores de compilador C e vinculador para
libmpdec
, usados pelo módulodecimal
, substituindopkg-config
.Nota
Estas variáveis de ambiente não têm efeito a menos que
--with-system-libmpdec
seja especificado.
- LIBLZMA_CFLAGS¶
- LIBLZMA_LIBS¶
Sinalizadores de compilador C e vinculador para
liblzma
, usados pelo módulolzma
, substituindopkg-config
.
- LIBREADLINE_CFLAGS¶
- LIBREADLINE_LIBS¶
Sinalizadores de compilador C e vinculador para
libreadline
, usados pelo móduloreadline
, substituindopkg-config
.
- LIBSQLITE3_CFLAGS¶
- LIBSQLITE3_LIBS¶
Sinalizadores de compilador C e vinculador para
libsqlite3
, usados pelo módulosqlite3
, substituindopkg-config
.
- LIBUUID_CFLAGS¶
- LIBUUID_LIBS¶
Sinalizadores de compilador C e vinculador para
libuuid
, usados pelo módulouuid
, substituindopkg-config
.
- PANEL_CFLAGS¶
- PANEL_LIBS¶
Sinalizadores de compilador C e vinculador para PANEL, substituindo
pkg-config
.Sinalizadores de compilador C e vinculador para
libpanel
oulibpanelw
, usados pelo módulocurses.panel
, substituindopkg-config
.
- TCLTK_CFLAGS¶
- TCLTK_LIBS¶
Sinalizadores de compilador C e vinculador para TCLTK, substituindo
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
Durante a construção, você poderá encontrar avisos do compilador sobre a indisponibilidade de dados de perfil para alguns arquivos fonte. Esses avisos são inofensivos, pois apenas um subconjunto do código é exercido durante a aquisição de dados de perfil. Para desativar esses avisos no Clang, suprima-os manualmente adicionando
-Wno-profile-instr-unprofiled
aCFLAGS
.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: A falha da tarefa não é mais ignorada silenciosamente.
- --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¶
Argumentos para
llvm-bolt
ao criar um binário otimizado com BOLT.Adicionado na versão 3.12.
- BOLT_INSTRUMENT_FLAGS¶
Argumentos para
llvm-bolt
ao instrumentar binários.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¶
Desativa o alocador rápido mimalloc (habilitado por padrão).
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: Construções de lançamento e construçõ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
).
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
.
A variável de ambiente
PYTHONDUMPREFS
pode ser usada para despejar objetos e contagens de referências ainda ativas na saída do Python.Objetos alocados estaticamente não são rastreados.
Adicionado na versão 3.8.
Alterado na versão 3.13: Esta construção agora é compatibilidade de ABI com a construção de lançamento e construção de depuração.
- --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¶
Habilita o detector de corrida de dados ThreadSanitizer,
tsan
(o padrão é não).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 bibliotecampdecimal
instalada, veja o módulodecimal
(o padrão é sim).Adicionado na versão 3.3.
Alterado na versão 3.13: O padrão é usar a biblioteca
mpdecimal
instalada.Deprecated since version 3.13, will be removed in version 3.15: Uma cópia dos fontes da biblioteca
mpdecimal
não será mais distribuída com Python 3.15.Ver também
- --with-readline=readline|editline¶
Designa uma biblioteca backend para o módulo
readline
.readline: Usa readline como o backend.
editline: Usa editline como o 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¶
Veja 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
).
- --with-app-store-compliance¶
- --with-app-store-compliance=PATCH-FILE¶
A biblioteca padrão do Python contém strings que são conhecidas por acionar erros de ferramentas de inspeção automatizadas quando enviadas para distribuição pelas App Stores do macOS e do iOS. Se ativada, esta opção aplicará a lista de patches que corrigem a conformidade da app store. Um arquivo de patch personalizado também pode ser especificado. Esta opção está desativada por padrão.
Adicionado na versão 3.13.
3.3.14. Opções do iOS¶
Veja iOS/README.rst.
- --enable-framework=INSTALLDIR¶
Cria um Python.framework. Ao contrário do macOS, o argumento INSTALLDIR que especifica o caminho de instalação é obrigatório.
- --with-framework-name=FRAMEWORK¶
Especifica o nome do framework (padrão:
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¶
Programa para executar CPython para a plataforma host para compilação cruzada.
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
).Uma biblioteca estática
libpython
(.a
) é criada a partir de arquivos de objetos.python.o
e a biblioteca estáticalibpython
estão vinculadas ao programa finalpython
.Extensões C são construídas pelo Makefile (veja
Modules/Setup
).
3.4.3. Alvos principais do Makefile¶
3.4.3.1. make¶
Na maioria das vezes, ao reconstruir após editar algum código ou atualizar seu checkout do upstream, tudo que você precisa fazer é executar make
, que (pela semântica do Make) constrói o alvo padrão, o primeiro definido no Makefile. Por tradição (inclusive no projeto CPython) este é geralmente o alvo all
. O script configure
expande uma variável autoconf
, @DEF_MAKE_ALL_RULE@
para descrever precisamente quais alvos make all
serão construídos. As três opções são:
profile-opt
(configurado com--enable-optimizations
)build_wasm
(configurado com--with-emscripten-target
)build_all
(configurado sem usar explicitamente nenhum dos outros)
Dependendo das alterações mais recentes no arquivo fonte, o Make irá reconstruir quaisquer alvos (arquivos objetos e executáveis) considerados desatualizados, incluindo executar configure
novamente se necessário. As dependências de origem/alvo são muitas e mantidas manualmente, portanto, às vezes, o Make não tem todas as informações necessárias para detectar corretamente todos os alvos que precisam ser reconstruídos. Dependendo de quais destinos não são reconstruídos, você poderá enfrentar vários problemas. Se você tiver problemas de construção ou teste que você não pode explicar de outra forma, make clean && make
deve resolver a maioria dos problemas de dependência, às custas de tempos de construção mais longos.
3.4.3.2. make platform¶
Constrói o programa python
, mas não constrói os módulos de extensão da biblioteca padrão. Isto gera um arquivo chamado platform
que contém uma única linha descrevendo os detalhes da plataforma de construção, por exemplo, macosx-14.3-arm64-3.12
ou linux-x86_64-3.13
.
3.4.3.3. make profile-opt¶
Constrói Python usando otimização guiada por perfil (PGO). Você pode usar a opção --enable-optimizations
do configure para tornar este o alvo padrão do comando make
(make all
ou apenas make
).
3.4.3.4. make clean¶
Remove arquivos construídos.
3.4.3.5. make distclean¶
Além do trabalho feito por make clean
, remove os arquivos criados pelo script configure. configure
terá que ser executado antes de construir novamente. [1]
3.4.3.6. make install¶
Constrói o alvo all
e instala o Python.
3.4.3.7. make test¶
Constrói o alvo all
e execute o conjunto de testes Python com a opção --fast-ci
. Variáveis:
TESTOPTS
: opções adicionais de linha de comando regrtest.TESTPYTHONOPTS
: opções adicionais de linha de comando do Python.TESTTIMEOUT
: tempo limite em segundos (padrão: 10 minutos).
3.4.3.8. make buildbottest¶
Isto é semelhante ao make test
, mas usa a opção --slow-ci
e o tempo limite padrão de 20 minutos, em vez da opção --fast-ci
.
3.4.3.9. make regen-all¶
Gera novamente (quase) todos os arquivos gerados. Isso inclui (mas não está limitado a) casos de bytecode e arquivo gerador de analisador sintático. make regen-stdlib-module-names
e autoconf
devem ser executados separadamente para os restantes arquivos gerados.
3.4.4. Extensões C¶
Algumas extensões C são construídas como módulos embutidos, como o módulo sys
. Eles são construídos com a macro Py_BUILD_CORE_BUILTIN
definida. Módulos embutidos não possuem nenhum atributo __file__
:
>>> 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__'
Outras extensões C são construídas como bibliotecas dinâmicas, como o módulo _asyncio
. Eles são construídos com a macro Py_BUILD_CORE_MODULE
definida. Exemplo no 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
é usado para gerar alvos Makefile para construir extensões C. No início dos arquivos, as extensões C são construídas como módulos embutidos. Extensões definidas após o marcador *shared*
são construídas como bibliotecas dinâmicas.
As macros PyAPI_FUNC()
, PyAPI_DATA()
e PyMODINIT_FUNC
de Include/exports.h
são definidas de forma diferente dependendo se a macro Py_BUILD_CORE_MODULE
está definida:
Usa
Py_EXPORTED_SYMBOL
sePy_BUILD_CORE_MODULE
estiver definidoDo contrário, usa
Py_IMPORTED_SYMBOL
.
Se a macro Py_BUILD_CORE_BUILTIN
for usada por engano em uma extensão C construída como uma biblioteca compartilhada, sua função PyInit_xxx()
não será exportada, causando um ImportError
na importação.
3.5. Sinalizadores do compilador e do vinculador¶
Opções definidas pelo script ./configure
e variáveis de ambiente e usadas por Makefile
.
3.5.1. Sinalizadores do pré-processador¶
- CONFIGURE_CPPFLAGS¶
Valor da variável
CPPFLAGS
passado para o script./configure
.Adicionado na versão 3.6.
- CPPFLAGS¶
Sinalizadores de pré-processador C++ / (Objective) C, p.ex.
-Iinclude_dir
se você tiver cabeçalhos em um diretório não padrão include_dir.Tanto
CPPFLAGS
quantoLDFLAGS
precisam conter o valor do shell para poder construir módulos de extensão usando os diretórios especificados nas variáveis de ambiente.
- BASECPPFLAGS¶
Adicionado na versão 3.4.
- PY_CPPFLAGS¶
Sinalizadores extras de pré-processador adicionados para construir os arquivos de objeto do interpretador.
Padrão:
$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)
.Adicionado na versão 3.2.
3.5.2. Sinalizadores do compilador¶
- CC¶
Comando do compilador C.
Exemplo:
gcc -pthread
.
- CXX¶
Comando do compilador C++.
Exemplo:
g++ -pthread
.
- CFLAGS¶
Sinalizadores do compilador C.
- CFLAGS_NODIST¶
CFLAGS_NODIST
é usado para construir o interpretador e extensões C da stdlib. Use-o quando um sinalizador do compilador não deve fazer parte deCFLAGS
depois que o Python estiver instalado (gh-65320).Em particular,
CFLAGS
não deve conter:o sinalizador do compilador
-I
(para definir o caminho de pesquisa para arquivos incluídos). Os sinalizadores-I
são processadas da esquerda para a direita, e quaisquer sinalizadores emCFLAGS
terão precedência sobre os sinalizadores-I
fornecidos pelo usuário e pelo pacote.sinalizadores de segurança como
-Werror
porque as distribuições não podem controlar se os pacotes instalados pelos usuários estão em conformidade com esses padrões elevados.
Adicionado na versão 3.5.
- COMPILEALL_OPTS¶
Opções passadas para a linha de comando
compileall
ao construir arquivos PYC emmake install
. Padrão:-j0
.Adicionado na versão 3.12.
- EXTRA_CFLAGS¶
Sinalizadores extra do compilador C.
- CONFIGURE_CFLAGS¶
Valor da variável
CFLAGS
passado para o script./configure
.Adicionado na versão 3.2.
- CONFIGURE_CFLAGS_NODIST¶
Valor da variável
CFLAGS_NODIST
passado para o script./configure
.Adicionado na versão 3.5.
- BASECFLAGS¶
Sinalizadores base do compilador.
- OPT¶
Sinalizadores de otimização.
- CFLAGS_ALIASING¶
Sinalizadores de alias estritos ou não estritos usados para compilar
Python/dtoa.c
.Adicionado na versão 3.7.
- CCSHARED¶
Sinalizadores de compilador usados para construir uma biblioteca compartilhada.
Por exemplo,
-fPIC
é usado no Linux e no BSD.
- CFLAGSFORSHARED¶
Sinalizadores extras de C adicionados para construir os arquivos de objeto do interpretador.
Padrão:
$(CCSHARED)
quando--enable-shared
é usado, ou uma string vazia caso contrário.
- PY_CFLAGS¶
Padrão:
$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
.
- PY_CFLAGS_NODIST¶
Padrão:
$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal
.Adicionado na versão 3.5.
- PY_STDMODULE_CFLAGS¶
Sinalizadores do C usados para construir os arquivos de objeto do interpretador.
Padrão:
$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)
.Adicionado na versão 3.7.
- PY_CORE_CFLAGS¶
Padrão:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE
.Adicionado na versão 3.2.
- PY_BUILTIN_MODULE_CFLAGS¶
Sinalizadores do compilador para construir um módulo de extensão de biblioteca padrão como um módulo embutido, como o módulo
posix
.Padrão:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN
.Adicionado na versão 3.8.
- PURIFY¶
Comando de Purify. Purify é um programa depurador de memória.
Padrão: string vazia (não usada).
3.5.3. Sinalizadores do vinculador¶
- LINKCC¶
Comando do vinculador usado para construir programas como
python
e_testembed
.Padrão:
$(PURIFY) $(CC)
.
- CONFIGURE_LDFLAGS¶
Valor da variável
LDFLAGS
passado para o script./configure
.Evite atribuir
CFLAGS
,LDFLAGS
, etc. para que os usuários possam usá-los na linha de comando para anexar a esses valores sem pisotear os valores predefinidos.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).Em particular,
LDFLAGS
não deve conter:o sinalizador do compilador
-L
(para definir o caminho de pesquisa para arquivos incluídos). Os sinalizadores-L
são processadas da esquerda para a direita, e quaisquer sinalizadores emLDFLAGS
terão precedência sobre os sinalizadores-L
fornecidos pelo usuário e pelo pacote.
- CONFIGURE_LDFLAGS_NODIST¶
Valor da variável
LDFLAGS_NODIST
passado para o script./configure
.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.Tanto
CPPFLAGS
quantoLDFLAGS
precisam conter o valor do shell para poder construir módulos de extensão usando os diretórios especificados nas variáveis de ambiente.
- LIBS¶
Sinalizadores do vinculador para passar bibliotecas para o vinculador ao vincular o executável Python.
Exemplo:
-lrt
.
- LDSHARED¶
Comando para construir uma biblioteca compartilhada.
Padrão:
@LDSHARED@ $(PY_LDFLAGS)
.
- BLDSHARED¶
Comando para construir a biblioteca compartilhada
libpython
.Padrão:
@BLDSHARED@ $(PY_CORE_LDFLAGS)
.
- PY_LDFLAGS¶
Padrão:
$(CONFIGURE_LDFLAGS) $(LDFLAGS)
.
- PY_LDFLAGS_NODIST¶
Padrão:
$(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.
Notas de rodapé