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 and hashlib 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ó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.

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

Turn on internal Python performance statistics gathering.

By default, statistics gathering is off. Use python3 -X pystats command or set PYTHONSTATS=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) or C:\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" to sys.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 by bz2 module, overriding pkg-config.

CURSES_CFLAGS
CURSES_LIBS

C compiler and linker flags for libncurses or libncursesw, used by curses module, overriding pkg-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 by hashlib module, overriding pkg-config.

LIBEDIT_CFLAGS
LIBEDIT_LIBS

C compiler and linker flags for libedit, used by readline module, overriding pkg-config.

LIBFFI_CFLAGS
LIBFFI_LIBS

C compiler and linker flags for libffi, used by ctypes module, overriding pkg-config.

LIBMPDEC_CFLAGS
LIBMPDEC_LIBS

C compiler and linker flags for libmpdec, used by decimal module, overriding pkg-config.

Nota

These environment variables have no effect unless --with-system-libmpdec is specified.

LIBLZMA_CFLAGS
LIBLZMA_LIBS

C compiler and linker flags for liblzma, used by lzma module, overriding pkg-config.

LIBREADLINE_CFLAGS
LIBREADLINE_LIBS

C compiler and linker flags for libreadline, used by readline module, overriding pkg-config.

LIBSQLITE3_CFLAGS
LIBSQLITE3_LIBS

C compiler and linker flags for libsqlite3, used by sqlite3 module, overriding pkg-config.

LIBUUID_CFLAGS
LIBUUID_LIBS

C compiler and linker flags for libuuid, used by uuid module, overriding pkg-config.

PANEL_CFLAGS
PANEL_LIBS

C compiler and Linker flags for PANEL, overriding pkg-config.

C compiler and linker flags for libpanel or libpanelw, used by curses.panel module, overriding pkg-config.

TCLTK_CFLAGS
TCLTK_LIBS

C compiler and linker flags for TCLTK, overriding pkg-config.

ZLIB_CFLAGS
ZLIB_LIBS

C compiler and linker flags for libzlib, used by gzip module, overriding pkg-config.

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.

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

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 to 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: 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 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

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

Enable ThreadSanitizer data race detector, tsan (default is no).

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 mpdec instalada, veja o módulo decimal (o padrão é não).

Adicionado na versão 3.3.

Ver também

LIBMPDEC_CFLAGS and LIBMPDEC_LIBS.

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

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

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

  • A static libpython library (.a) is created from objects files.

  • python.o e a biblioteca estática libpython estão vinculadas ao programa final python.

  • 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 the Py_BUILD_CORE_MODULE is defined

  • Use 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 and LDFLAGS 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 of CFLAGS 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 in CFLAGS would take precedence over user- and package-supplied -I flags.

  • hardening flags such as -Werror because distributions cannot control whether packages installed by users conform to such heightened standards.

Adicionado na versão 3.5.

COMPILEALL_OPTS

Options passed to the compileall command line when building PYC files in make 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 que CFLAGS_NODIST. Use-o quando um sinalizador de vinculador não fizer parte de LDFLAGS 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 in LDFLAGS 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 and LDFLAGS 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