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 e hashlib.

  • 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ódulo sqlite3.

Veja o método sqlite3.Connection.enable_load_extension() do módulo sqlite3.

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 para 15 ou 30.

Veja sys.int_info.bits_per_digit.

--with-suffix=SUFFIX

Define o sufixo do executável do Python para SUFFIX.

O sufixo padrão é .exe no Windows e macOS (executável python.exe), .js em nó Emscripten, .html em navegador Emscripten, .wasm em WASI e uma string vazia em outras plataformas (executável python).

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ódulo zoneinfo.

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ódulo decimal.

Veja decimal.HAVE_CONTEXTVAR e o módulo contextvars.

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.

--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 pacote ensurepip._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 é opcional

  • yes: pkg-config é obrigatório

  • no: 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 ambiente PYTHONSTATS=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) ou C:\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" a sys.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ódulo bz2, substituindo pkg-config.

CURSES_CFLAGS
CURSES_LIBS

Sinalizadores de compilador C e vinculador para libncurses ou libncursesw, usados ​​pelo módulo curses, substituindo pkg-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ódulo hashlib, substituindo pkg-config.

LIBEDIT_CFLAGS
LIBEDIT_LIBS

Sinalizadores de compilador C e vinculador para libedit, usados ​​pelo módulo readline, substituindo pkg-config.

LIBFFI_CFLAGS
LIBFFI_LIBS

Sinalizadores de compilador C e vinculador para libffi, usados ​​pelo módulo ctypes, substituindo pkg-config.

LIBMPDEC_CFLAGS
LIBMPDEC_LIBS

Sinalizadores de compilador C e vinculador para libmpdec, usados ​​pelo módulo decimal, substituindo pkg-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ódulo lzma, substituindo pkg-config.

LIBREADLINE_CFLAGS
LIBREADLINE_LIBS

Sinalizadores de compilador C e vinculador para libreadline, usados ​​pelo módulo readline, substituindo pkg-config.

LIBSQLITE3_CFLAGS
LIBSQLITE3_LIBS

Sinalizadores de compilador C e vinculador para libsqlite3, usados ​​pelo módulo sqlite3, substituindo pkg-config.

LIBUUID_CFLAGS
LIBUUID_LIBS

Sinalizadores de compilador C e vinculador para libuuid, usados ​​pelo módulo uuid, substituindo pkg-config.

PANEL_CFLAGS
PANEL_LIBS

Sinalizadores de compilador C e vinculador para PANEL, substituindo pkg-config.

Sinalizadores de compilador C e vinculador para libpanel ou libpanelw, usados ​​pelo módulo curses.panel, substituindo pkg-config.

TCLTK_CFLAGS
TCLTK_LIBS

Sinalizadores de compilador C e vinculador para TCLTK, substituindo pkg-config.;

ZLIB_CFLAGS
ZLIB_LIBS

Sinalizadores de compilador C e vinculador para libzlib, usados ​​pelo módulo gzip, substituindo pkg-config.

3.3.5. Opções de WebAssembly

--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.

--disable-test-modules

Não constrói nem instala módulos de teste, como o pacote test ou o módulo de extensão _testcapi (construído e instalado por padrão).

Adicionado na versão 3.10.

--with-ensurepip=[upgrade|install|no]

Seleciona o comando ensurepip executado na instalação do Python:

  • upgrade (padrão): executa o comando python -m ensurepip --altinstall --upgrade.

  • install: executa o comando python -m ensurepip --altinstall;

  • no: não executa ensurepip;

Adicionado na versão 3.6.

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 a CFLAGS.

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 ou lld).

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 e merge-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 e BOLT_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 a sys.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 ambiente PYTHONDEBUG 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 e Py_REF_DEBUG.

  • Adiciona verificações de tempo de execução: código cercado por #ifdef Py_DEBUG e #endif. Habilita as asserções assert(...) e _PyObject_ASSERT(...): não define a macro NDEBUG (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:

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 compilador OPT.

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

--enable-shared

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 instala python.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 biblioteca expat instalada (o padrão é não).

--with-system-libmpdec

Constrói o módulo de extensão _decimal usando uma biblioteca mpdecimal instalada, veja o módulo decimal (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.

--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 e pkg-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.

--disable-safety

Disable compiler options that are recommended by OpenSSF for security reasons with no performance overhead. If this option is not enabled, CPython will be built based on safety compiler options with no slow down. When this option is enabled, CPython will not be built with the compiler options listed below.

The following compiler options are disabled with --disable-safety:

Adicionado na versão 3.14.

--enable-slower-safety

Enable compiler options that are recommended by OpenSSF for security reasons which require overhead. If this option is not enabled, CPython will not be built based on safety compiler options which performance impact. When this option is enabled, CPython will be built with the compiler options listed below.

The following compiler options are enabled with --enable-slower-safety:

  • -D_FORTIFY_SOURCE=3: Fortify sources with compile- and run-time checks for unsafe libc usage and buffer overflows.

Adicionado na versão 3.14.

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 cruzada

Adicionado 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 por configure);

  • pyconfig.h (criado por configure);

  • Modules/Setup: Extensões C construídas pelo Makefile usando o shell script Module/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ática libpython estão vinculadas ao programa final python.

  • 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 (chosen if the host platform matches wasm32-wasi* or wasm32-emscripten)

  • 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

Build the all target and run the Python test suite with the --fast-ci option without GUI tests. Variables:

  • 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 ci

This is similar to make test, but uses the -ugui to also run GUI tests.

Adicionado na versão 3.14.

3.4.3.9. 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.10. 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 se Py_BUILD_CORE_MODULE estiver definido

  • Do 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 quanto LDFLAGS 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 de CFLAGS 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 em CFLAGS 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 em make 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 que CFLAGS_NODIST. Use-o quando um sinalizador de vinculador não fizer parte de LDFLAGS 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 em LDFLAGS 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 quanto LDFLAGS 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é