3. Configurar o Python

3.1. Opções de configuração

Liste todas as opções do ./configure usando:

./configure --help

Veja também o Misc/SpecialBuilds.txt na distribuição de código-fonte do Python.

3.1.1. Opções gerais

--enable-loadable-sqlite-extensions

Oferece suporte a extensões carregáveis ​​no módulo de extensão _sqlite (desabilitado por padrão).

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

Novo na versão 3.6.

--disable-ipv6

Desabilita suporte a IPv6 (habilitado por padrão se houver suporte), veja o módulo socket.

--enable-big-digits=[15|30]

Define o tamanho em bits dos dígitos de int do Python: 15 ou 30 bits.

Por padrão, o número de bits é selecionado dependendo de sizeof(void*): 30 bits se o tamanho de void* for 64 bits ou maior, 15 bits caso contrário.

Define o PYLONG_BITS_IN_DIGIT para 15 ou 30.

Veja sys.int_info.bits_per_digit.

--with-cxx-main
--with-cxx-main=COMPILER

Compila a função main() do Python e vincula o executável do Python ao compilador C++: $CXX ou COMPILER se especificado.

--with-suffix=SUFFIX

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

O sufixo padrão é .exe no Windows e macOS (executável python.exe), e uma string vazia em outras plataformas (executável python).

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

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

Novo na versão 3.9.

--with-dbmliborder=db1:db2:...

Substitui a ordem de verificação de backends de banco de dados para o módulo dbm

Um valor válido é uma string separada por dois pontos (:) com os nomes de backend:

  • ndbm;

  • gdbm;

  • bdb.

--without-c-locale-coercion

Desabilita a coerção de localidade C para uma localidade baseada em UTF-8 (ativada por padrão).

Não define a macro PY_COERCE_C_LOCALE.

Consulte PYTHONCOERCECLOCALE e a PEP 538.

--with-platlibdir=DIRNAME

Nome do diretório da biblioteca Python (o padrão é lib).

Fedora e SuSE usam lib64 em plataformas de 64 bits.

Veja sys.platlibdir.

Novo na versão 3.9.

--with-wheel-pkg-dir=PATH

Diretório de pacotes de wheel usados pelo módulo ensurepip (nenhum por padrão).

Algumas políticas de empacotamento de distribuição do Linux recomendam contra o empacotamento de dependências. Por exemplo, o Fedora instala pacotes wheel no diretório /usr/share/python-wheels/ e não instala o pacote ensurepip._bundled.

Novo na versão 3.10.

3.1.2. 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 compila nem instala módulos de teste, como o pacote test ou o módulo de extensão _testcapi (compilado e instalado por padrão).

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

Novo na versão 3.6.

3.1.3. Opções de desempenho

Configuring Python using --enable-optimizations --with-lto (PGO + LTO) is recommended for best performance.

--enable-optimizations

Habilita a otimização guiada por perfil (PGO, do inglês Profile Guided Optimization) usando PROFILE_TASK (desabilitado por padrão).

O compilador C Clang requer o programa llvm-profdata para PGO. No macOS, o GCC também exige: o GCC é apenas um apelido para o Clang no macOS.

Desabilita também a interposição semântica no libpython se --enable-shared e GCC forem usados: adiciona -fno-semantic-interposition aos sinalizadores do compilador e do vinculador.

Novo na versão 3.6.

Alterado na versão 3.10: Usa -fno-semantic-interposition no GCC.

PROFILE_TASK

Variável de ambiente usada no Makefile: argumentos de linha de comando do Python para a tarefa de geração de PGO.

Padrão: -m test --pgo --timeout=$(TESTTIMEOUT).

Novo na versão 3.8.

--with-lto

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

Novo na versão 3.6.

--with-computed-gotos

Habilita “gotos” computados no laço de avaliação (habilitado por padrão em compiladores suportados).

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

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

  • Add PYTHONTHREADDEBUG environment variable.

  • Add support for the __ltrace__ variable: enable low-level tracing in the bytecode evaluation loop if the variable is defined.

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

  • Add runtime checks: code surroundeded by #ifdef Py_DEBUG and #endif. Enable assert(...) and _PyObject_ASSERT(...) assertions: don’t set the NDEBUG macro (see also the --with-assertions configure option). Main runtime checks:

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

    • O coletor de lixo (função gc.collect()) executa algumas verificações básicas na consistência dos objetos.

    • A macro Py_SAFE_DOWNCAST() verifica o underflow e o overflow de inteiros ao fazer o downcast de tipos largos para tipos estreitos.

Veja também o Modo de Desenvolvimento do Python e a opção de configuração --with-trace-refs.

Alterado na versão 3.8: Compilações de lançamento e compilações de depuração agora são compatíveis com ABI: definir a macro Py_DEBUG não implica mais na macro Py_TRACE_REFS (consulte a opção --with-trace-refs), que apresenta a única incompatibilidade de ABI.

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

  • Add sys.getobjects() function.

  • Adiciona a variável de ambiente PYTHONDUMPREFS.

Esta construção não é compatível com ABI com a construção de lançamento (construção padrão) ou construção de depuração (macros Py_DEBUG e Py_REF_DEBUG).

Novo na versão 3.8.

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

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

Novo na versão 3.6.

--with-address-sanitizer

Habilita o detector de erros de memória AddressSanitizer, asan (o padrão é não).

Novo na versão 3.6.

--with-memory-sanitizer

Habilita o detector de erros de alocação do MemorySanitizer, msan (o padrão é não).

Novo na versão 3.6.

--with-undefined-behavior-sanitizer

Habilita o detector de comportamento indefinido UndefinedBehaviorSanitizer, ubsan (o padrão é não).

Novo na versão 3.6.

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

Novo na versão 3.10.

3.1.7. Opções da biblioteca

--with-libs='lib1 ...'

Vincula bibliotecas adicionais (o padrão é não).

--with-system-expat

Build the pyexpat module using an installed expat library (default is no).

--with-system-ffi

Build the _ctypes extension module using an installed ffi library, see the ctypes module (default is system-dependent).

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

Novo na versão 3.3.

--with-readline=editline

Usa a biblioteca editline para backend do módulo readline.

Define a macro WITH_EDITLINE.

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

Novo na versão 3.10.

--with-tcltk-includes='-I...'

Override search for Tcl and Tk include files.

--with-tcltk-libs='-L...'

Override search for Tcl and Tk libraries.

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

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

Novo na versão 3.10.

3.1.8. Opções de segurança

--with-hash-algorithm=[fnv|siphash24]

Seleciona o algoritmo de hash para usar em Python/pyhash.c:

  • siphash24 (default).

  • fnv;

Novo na versão 3.4.

--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2

Módulos embutidos de hash

  • md5;

  • sha1;

  • sha256;

  • sha512;

  • sha3 (com shake);

  • blake2.

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

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

3.2. Sistema de Construção Python

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

  • setup.py: C extensions built using the distutils module.

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

  • C extensions are built by the Makefile (see Modules/Setup) and python setup.py build.

3.2.3. Alvos principais do Makefile

  • make: Build Python with the standard library.

  • make platform:: build the python program, but don’t build the standard library extension modules.

  • make profile-opt: build Python using Profile Guided Optimization (PGO). You can use the configure --enable-optimizations option to make this the default target of the make command (make all or just make).

  • make buildbottest: Build Python and run the Python test suite, the same way than buildbots test Python. Set TESTTIMEOUT variable (in seconds) to change the test timeout (1200 by default: 20 minutes).

  • make install: Build and install Python.

  • make regen-all: Regenerate (almost) all generated files; make regen-stdlib-module-names and autoconf must be run separately for the remaining generated files.

  • make clean: Remove built files.

  • make distclean: Same than make clean, but remove also files created by the configure script.

3.2.4. Extensões C

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

The setup.py script only builds C extensions as shared libraries using the distutils module.

The PyAPI_FUNC(), PyAPI_API() and PyMODINIT_FUNC() macros of Include/pyport.h are defined differently depending if the Py_BUILD_CORE_MODULE macro is defined:

  • Usa Py_EXPORTED_SYMBOL se Py_BUILD_CORE_MODULE estiver definido

  • Do contrário, usa Py_IMPORTED_SYMBOL.

If the Py_BUILD_CORE_BUILTIN macro is used by mistake on a C extension built as a shared library, its PyInit_xxx() function is not exported, causing an ImportError on import.

3.3. Sinalizadores do compilador e do vinculador

Opções definidas pelo script ./configure e variáveis ​​de ambiente e usadas por Makefile.

3.3.1. Sinalizadores do pré-processador

CONFIGURE_CPPFLAGS

Valor da variável CPPFLAGS passado para o script ./configure.

Novo na versão 3.6.

CPPFLAGS

(Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir>.

Both CPPFLAGS and LDFLAGS need to contain the shell’s value for setup.py to be able to build extension modules using the directories specified in the environment variables.

BASECPPFLAGS

Novo na versão 3.4.

PY_CPPFLAGS

Sinalizadores extras de pré-processador adicionados para construir os arquivos de objeto do interpretador.

Padrão: $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS).

Novo na versão 3.2.

3.3.2. Sinalizadores do compilador

CC

Comando do compilador C.

Exemplo: gcc -pthread.

MAINCC

C compiler command used to build the main() function of programs like python.

Variable set by the --with-cxx-main option of the configure script.

Default: $(CC).

CXX

Comando do compilador C++.

Used if the --with-cxx-main option is used.

Exemplo: g++ -pthread.

CFLAGS

Sinalizadores do compilador C.

CFLAGS_NODIST

CFLAGS_NODIST is used for building the interpreter and stdlib C extensions. Use it when a compiler flag should not be part of the distutils CFLAGS once Python is installed (bpo-21121).

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.

Novo na versão 3.5.

EXTRA_CFLAGS

Sinalizadores extra do compilador C.

CONFIGURE_CFLAGS

Valor da variável CFLAGS passado para o script ./configure.

Novo na versão 3.2.

CONFIGURE_CFLAGS_NODIST

Valor da variável CFLAGS_NODIST passado para o script ./configure.

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

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

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

Novo na versão 3.7.

PY_CORE_CFLAGS

Padrão: $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE.

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

Novo na versão 3.8.

PURIFY

Comando de Purify. Purify é um programa depurador de memória.

Padrão: string vazia (não usada).

3.3.3. Sinalizadores do vinculador

LINKCC

Comando do vinculador usado para construir programas como python e _testembed.

Default: $(PURIFY) $(MAINCC).

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.

Novo na versão 3.2.

LDFLAGS_NODIST

LDFLAGS_NODIST is used in the same manner as CFLAGS_NODIST. Use it when a linker flag should not be part of the distutils LDFLAGS once Python is installed (bpo-35257).

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.

Novo na versão 3.8.

LDFLAGS

Linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir>.

Both CPPFLAGS and LDFLAGS need to contain the shell’s value for setup.py to be able to build extension modules using the directories specified in the environment variables.

LIBS

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

Novo na versão 3.8.

PY_CORE_LDFLAGS

Sinalizadores de vinculador usados para construir os arquivos de objeto do interpretador.

Novo na versão 3.8.