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ódulosqlite3
.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 devoid*
for 64 bits ou maior, 15 bits caso contrário.Define o
PYLONG_BITS_IN_DIGIT
para15
ou30
.
-
--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ávelpython.exe
), e uma string vazia em outras plataformas (executávelpython
).
-
--with-tzpath
=<list of absolute paths separated by pathsep>
¶ Seleciona o caminho de pesquisa de fuso horário padrão para
zoneinfo.TZPATH
. Veja a Configuração de tempo de compilação do módulozoneinfo
.Padrão:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo
.Veja o separador de caminhos
os.pathsep
.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ódulodecimal
.Veja
decimal.HAVE_CONTEXTVAR
e o módulocontextvars
.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 pacoteensurepip._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
.
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
oulld
).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
asys.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
ePy_REF_DEBUG
.Add runtime checks: code surroundeded by
#ifdef Py_DEBUG
and#endif
. Enableassert(...)
and_PyObject_ASSERT(...)
assertions: don’t set theNDEBUG
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
ePy_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 compiladorOPT
.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¶
Habilita a construção de uma biblioteca Python compartilhada:
libpython
(o padrão é não).
-
--without-static-libpython
¶
Não constrói
libpythonMAJOR.MINOR.a
e não instalapython.o
(construído e habilitado por padrão).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 installedexpat
library (default is no).
-
--with-system-ffi
¶
Build the
_ctypes
extension module using an installedffi
library, see thectypes
module (default is system-dependent).
-
--with-system-libmpdec
¶
Constrói o módulo de extensão
_decimal
usando uma bibliotecampdec
instalada, veja o módulodecimal
(o padrão é não).Novo na versão 3.3.
-
--with-readline
=editline
¶ Usa a biblioteca
editline
para backend do móduloreadline
.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
epkg-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 porconfigure
);pyconfig.h
(criado porconfigure
);Modules/Setup
: Extensões C construídas pelo Makefile usando o shell scriptModule/makesetup
;setup.py
: C extensions built using thedistutils
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áticalibpython
estão vinculadas ao programa finalpython
.C extensions are built by the Makefile (see
Modules/Setup
) andpython setup.py build
.
3.2.3. Alvos principais do Makefile¶
make
: Build Python with the standard library.make platform:
: build thepython
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 themake
command (make all
or justmake
).make buildbottest
: Build Python and run the Python test suite, the same way than buildbots test Python. SetTESTTIMEOUT
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
andautoconf
must be run separately for the remaining generated files.make clean
: Remove built files.make distclean
: Same thanmake 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
sePy_BUILD_CORE_MODULE
estiver definidoDo 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
andLDFLAGS
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 likepython
.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 distutilsCFLAGS
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 emCFLAGS
terão precedência sobre os sinalizadores-I
fornecidos pelo usuário e pelo pacote.sinalizadores de segurança como
-Werror
porque as distribuições não podem controlar se os pacotes instalados pelos usuários estão em conformidade com esses padrões elevados.
Novo na versão 3.5.
-
EXTRA_CFLAGS
¶ Sinalizadores extra do compilador C.
-
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 asCFLAGS_NODIST
. Use it when a linker flag should not be part of the distutilsLDFLAGS
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 emLDFLAGS
terão precedência sobre os sinalizadores-L
fornecidos pelo usuário e pelo pacote.
-
CONFIGURE_LDFLAGS_NODIST
¶ Valor da variável
LDFLAGS_NODIST
passado para o script./configure
.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
andLDFLAGS
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.