3. Configurar Python

3.1. Configurar opciones

Enumerar todas las opciones del script ./configure usando:

./configure --help

Consultar también Misc/SpecialBuilds.txt en la distribución fuente de Python.

3.1.1. Opciones generales

--enable-loadable-sqlite-extensions

Admite extensiones cargables en el módulo de extensión _sqlite (el valor por defecto es no).

Consultar el método sqlite3.Connection.enable_load_extension() del módulo sqlite3.

Nuevo en la versión 3.6.

--disable-ipv6

Deshabilita la compatibilidad con IPv6 (habilitada de forma predeterminada si es compatible), consulte el módulo socket.

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

Define el tamaño en bits de los dígitos int de Python: 15 o 30 bits.

De forma predeterminada, el número de bits se selecciona según sizeof(void*): 30 bits si el tamaño de void* es de 64 bits o mayor, 15 bits en caso contrario.

Define el PYLONG_BITS_IN_DIGIT en 15 o 30.

Consultar sys.int_info.bits_per_digit.

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

Compila la función de Python main() y vincula el ejecutable de Python con el compilador de C++: $CXX, o COMPILER si se especifica.

--with-suffix=SUFFIX

Establece el sufijo ejecutable de Python en SUFFIX.

El sufijo por defecto es .exe en Windows y macOS (ejecutable python.exe), y una cadena de caracteres vacía en otras plataformas (ejecutable python).

--with-tzpath=<list of absolute paths separated by pathsep>

Selecciona la ruta de búsqueda de zona horaria predeterminada para zoneinfo.TZPATH. Consultar la Configuración en tiempo de compilación del módulo zoneinfo.

Por defecto: /usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo.

Consultar separador de rutas os.pathsep .

Nuevo en la versión 3.9.

--without-decimal-contextvar

Construye el módulo de extensión _decimal usando un contexto local de hilos en lugar de un contexto local de corutinas (predeterminado), consultar el módulo decimal.

Consultar decimal.HAVE_CONTEXTVAR y el módulo contextvars.

Nuevo en la versión 3.9.

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

Sobrescribe el orden para verificar los de las bases datos para el módulo dbm

Un valor válido es una cadena de caracteres separada por dos puntos (:) con los nombres de los backends:

  • ndbm;

  • gdbm;

  • bdb.

--without-c-locale-coercion

Deshabilita la coerción de configuración regional C a una configuración regional basada en UTF-8 (habilitada de forma predeterminada).

No define la macro PY_COERCE_C_LOCALE.

Consultar PYTHONCOERCECLOCALE y el PEP 538.

--with-platlibdir=DIRNAME

Nombre del directorio de la biblioteca de Python (por defecto es lib).

Fedora y SuSE usan lib64 en plataformas 64-bit.

Consultar sys.platlibdir.

Nuevo en la versión 3.9.

--with-wheel-pkg-dir=PATH

Directorio de los paquetes wheel usados por el módulo ensurepip (ninguno por defecto)

Algunas políticas de empaquetado de distribución de Linux recomiendan no empaquetar dependencias. Por ejemplo, Fedora instala paquetes wheel en el directorio /usr/share/python-wheels/ y no instala el paquete ensurepip._bundled.

Nuevo en la versión 3.10.

3.1.2. Opciones de instalación

--prefix=PREFIX

Install architecture-independent files in PREFIX. On Unix, it defaults to /usr/local.

This value can be retrived at runtime using sys.prefix.

As an example, one can use --prefix="$HOME/.local/" to install a Python in its home directory.

--exec-prefix=EPREFIX

Install architecture-dependent files in EPREFIX, defaults to --prefix.

This value can be retrived at runtime using sys.exec_prefix.

--disable-test-modules

No construya ni instale módulos de prueba, como el paquete test o el módulo de extensión _testcapi (construido e instalado por defecto).

Nuevo en la versión 3.10.

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

Selecciona el comando ensurepip que se ejecuta en la instalación de Python:

  • upgrade (por defecto): ejecutar el comando python -m ensurepip --altinstall --upgrade.

  • install: ejecutar el comando python -m ensurepip --altinstall;

  • no: no ejecuta ensurepip;

Nuevo en la versión 3.6.

3.1.3. Opciones de desempeño

Se recomienda configurar Python usando --enable-optimizations --with-lto (PGO + LTO) para obtener el mejor rendimiento.

--enable-optimizations

Habilite la Optimización Guiada por Perfiles (PGO por sus siglas en inglés) usando PROFILE_TASK (deshabilitado de forma predeterminada).

El compilador de C Clang requiere el programa llvm-profdata para PGO. En macOS, GCC también lo requiere: GCC es solo un alias de Clang en macOS.

Desactiva también la interposición semántica en libpython si se usa --enable-shared y GCC: agregar -fno-semantic-interposition a los flags del compilador y del enlazador.

Nuevo en la versión 3.6.

Distinto en la versión 3.10: Usar -fno-semantic-interposition en GCC.

PROFILE_TASK

Variable de entorno utilizada en el Makefile: argumentos de la línea de comando Python para la tarea de generación de PGO.

Por defecto: -m test --pgo --timeout=$(TESTTIMEOUT).

Nuevo en la versión 3.8.

--with-lto

Habilita la Optimización de Tiempo de Enlace (LTO por sus siglas en inglés) en cualquier compilación (deshabilitado de forma predeterminada).

El compilador de C Clang requiere llvm-ar para LTO (ar en macOS), así como un enlazador compatible con LTO (ld.gold o lld).

Nuevo en la versión 3.6.

--with-computed-gotos

Habilita los gotos calculados en el ciclo de evaluación (habilitado de forma predeterminada en los compiladores compatibles).

--without-pymalloc

Deshabilita el asignador de memoria especializado de Python pymalloc (habilitado de forma predeterminada).

Consultar también la variable de entorno PYTHONMALLOC.

--without-doc-strings

Deshabilita las cadenas de caracteres de documentación estáticas para reducir el espacio de memoria (habilitado de forma predeterminada). Las cadenas de caracteres de documentación definidas en Python no se ven afectadas.

No define la macro WITH_DOC_STRINGS.

Consultar la macro PyDoc_STRVAR().

--enable-profiling

Habilita el análisis de rendimiento de código (profiling) de nivel C con gprof (deshabilitado de forma predeterminada).

3.1.4. Compilación de depuración de Python

Una compilación de depuración es Python construido con la opción de configuración --with-pydebug.

Efectos de una compilación de depuración:

  • Muestra todas las advertencias de forma predeterminada: la lista de filtros de advertencia predeterminados está vacía en el módulo warnings.

  • Agrega d a sys.abiflags.

  • Agrega la función sys.gettotalrefcount().

  • Agrega la opción de línea de comando -X showrefcount.

  • Agrega la variable de entorno PYTHONTHREADDEBUG.

  • Agrega soporte para la variable __ltrace__: habilita el rastreo de bajo nivel en el ciclo de evaluación del código de bytes si la variable está definida.

  • Instala ganchos de depuración en los asignadores de memoria para detectar el desbordamiento del búfer y otros errores de memoria.

  • Define las macros Py_DEBUG y Py_REF_DEBUG.

  • Agrega verificaciones de tiempo de ejecución: código rodeado por `#ifdef Py_DEBUG y #endif`. Habilite las aserciones assert(...) y _PyObject_ASSERT(...): no configure la macro NDEBUG (consultar también la opción de configuración --with-assertions). Comprobaciones principales de tiempo de ejecución:

    • Agregue controles de sanidad en los argumentos de la función.

    • Los objetos unicode e int se crean con su memoria completa con un patrón para detectar el uso de objetos no inicializados.

    • Asegúrese de que las funciones que pueden borrar o reemplazar la excepción actual no se invocan con una excepción lanzada.

    • El recolector de basura (función gc.collect()) ejecuta algunas comprobaciones básicas sobre la consistencia de los objetos.

    • La macro Py_SAFE_DOWNCAST() comprueba el subdesbordamiento y el desbordamiento de enteros al realizar una conversión descendente de tipos anchos a tipos estrechos.

Consultar también Modo de Desarrollo de Python y la opción de configuración --with-trace-refs.

Distinto en la versión 3.8: Las compilaciones de lanzamiento y las compilaciones de depuración ahora son compatibles con ABI: definir la macro Py_DEBUG ya no implica la macro Py_TRACE_REFS (consultar la opción --with-trace-refs), que presenta la única Incompatibilidad ABI.

3.1.5. Opciones de depuración

--with-pydebug

Compila Python en modo de depuración: define la macro Py_DEBUG (deshabilitada por defecto).

--with-trace-refs

Habilita las referencias de seguimiento con fines de depuración (deshabilitado de forma predeterminada).

Efectos:

  • Define la macro Py_TRACE_REFS.

  • Agrega la función sys.getobjects().

  • Agrega la variable de entorno PYTHONDUMPREFS.

Esta compilación no es ABI compatible con la compilación de lanzamiento (compilación predeterminada) o la compilación de depuración (macros Py_DEBUG y Py_REF_DEBUG).

Nuevo en la versión 3.8.

--with-assertions

Compila con las aserciones de C habilitadas (el valor predeterminado es no): assert(...); y _PyObject_ASSERT(...);.

Si se establece, la macro NDEBUG no está definida en la variable del compilador OPT.

Consultar también la opción --with-pydebug (compilación de depuración) que también habilita las aserciones.

Nuevo en la versión 3.6.

--with-valgrind

Habilite la compatibilidad con Valgrind (el valor predeterminado es no).

--with-dtrace

Habilite la compatibilidad con DTrace (el valor predeterminado es no).

Consultar Instrumentación de CPython con DTrace y SystemTap.

Nuevo en la versión 3.6.

--with-address-sanitizer

Habilita el detector de errores de memoria AddressSanitizer, asan (el valor predeterminado es no).

Nuevo en la versión 3.6.

--with-memory-sanitizer

Habilita el detector de errores de asignación MemorySanitizer, msan (el valor predeterminado es no).

Nuevo en la versión 3.6.

--with-undefined-behavior-sanitizer

Habilita el detector de comportamiento indefinido UndefinedBehaviorSanitizer, ubsan (el valor predeterminado es no).

Nuevo en la versión 3.6.

3.1.6. Opciones del enlazador

--enable-shared

Habilita la compilación de una biblioteca compartida de Python :libpython (el valor predeterminado es no).

--without-static-libpython

No compila libpythonMAJOR.MINOR.a y no instala python.o (compilado y habilitado de forma predeterminada).

Nuevo en la versión 3.10.

3.1.7. Opciones de bibliotecas

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

Enlace con bibliotecas adicionales (el valor predeterminado es no).

--with-system-expat

Compila el módulo pyexpat usando la biblioteca instalada expat instalada (por defecto es no).

--with-system-ffi

Compila el módulo de extensión _ctypes usando la biblioteca instalada ffi, consultar el módulo ctypes (el valor predeterminado es dependiente del sistema).

--with-system-libmpdec

Compila el módulo de extensión _decimal usando la biblioteca instalada mpdec, ver el módulo decimal (el valor predeterminado es no).

Nuevo en la versión 3.3.

--with-readline=editline

Utilice la biblioteca editline para el backend del módulo readline.

Define la macro WITH_EDITLINE.

Nuevo en la versión 3.10.

--without-readline

No cree el módulo readline (es construido por defecto).

No defina la macro HAVE_LIBREADLINE.

Nuevo en la versión 3.10.

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

Sobreescribe la búsqueda de archivos incluidos de Tcl y Tk.

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

Sobreescribe la búsqueda de bibliotecas Tcl y Tk.

--with-libm=STRING

Sobreescribe la biblioteca matemática libm a STRING (el valor predeterminado es dependiente del sistema).

--with-libc=STRING

Sobreescribe la biblioteca C libc a STRING (el valor predeterminado es dependiente del sistema).

--with-openssl=DIR

Raíz del directorio OpenSSL.

Nuevo en la versión 3.7.

--with-openssl-rpath=[no|auto|DIR]

Configura el directorio de la biblioteca en tiempo de ejecución (rpath) para las bibliotecas OpenSSL:

  • no (por defecto): no establece rpath;

  • auto: autodetecta rpath desde --with-openssl y pkg-config;

  • DIR: establece un rpath explícito.

Nuevo en la versión 3.10.

3.1.8. Opciones de seguridad

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

Selecciona el algoritmo hash para usar en Python/pyhash.c:

  • siphash24 (por defecto).

  • fnv;

Nuevo en la versión 3.4.

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

Módulos hash incorporados:

  • md5;

  • sha1;

  • sha256;

  • sha512;

  • sha3 (con shake);

  • blake2.

Nuevo en la versión 3.9.

--with-ssl-default-suites=[python|openssl|STRING]

Sobreescribe la cadena de conjuntos de cifrado predeterminada de OpenSSL:

  • python (por defecto): usa la selección principal de Python;

  • openssl: deja intactos los valores predeterminados de OpenSSL;

  • STRING: usa una cadena de caracteres personalizada

Consultar el módulo ssl.

Nuevo en la versión 3.7.

Distinto en la versión 3.10: Las configuraciones python y STRING también establecen TLS 1.2 como versión mínima del protocolo.

3.1.9. Opciones macOS

Ver Mac/README.rst.

--enable-universalsdk
--enable-universalsdk=SDKDIR

Crea una compilación binaria universal. SDKDIR especifica qué macOS SDK debe usarse para realizar la compilación (el valor predeterminado es no).

--enable-framework
--enable-framework=INSTALLDIR

Crear un Python.framework en lugar de una instalación Unix tradicional. Opcionalmente INSTALLDIR especifica la ruta de instalación (el valor predeterminado es no).

--with-universal-archs=ARCH

Especifique el tipo de binario universal que se debe crear. Esta opción solo es válida cuando se establece --enable-universalsdk.

Opciones:

  • universal2;

  • 32-bit;

  • 64-bit;

  • 3-way;

  • intel;

  • intel-32;

  • intel-64;

  • all.

--with-framework-name=FRAMEWORK

Especifica el nombre del framework de Python en macOS, solo es válido cuando --enable-framework está configurada (por defecto: Python).

3.2. Sistema de compilación Python

3.2.1. Archivos principales del sistema de compilación

  • configure.ac => configure;

  • Makefile.pre.in => Makefile (creado por configure);

  • pyconfig.h (creado por configure);

  • Modules/Setup: Extensiones C creadas por Makefile usando el script de shell Module/makesetup;

  • setup.py: extensiones C creadas con el módulo distutils.

3.2.2. Pasos principales de compilación

  • Los archivos C (.c) se crean como archivos objeto (.o).

  • La biblioteca estática libpython` (.a) se crea a a partir de archivos de objetos.

  • python.o y la biblioteca estática libpython están enlazadas al programa final python.

  • Las extensiones C son creadas por Makefile (ver Midules/Setup) y python setup.py build.

3.2.3. Objetivos principales de Makefile

  • make: Compilar Python con la biblioteca estándar.

  • make platform:: compila el programa python, pero no construye los módulos de extensión de la biblioteca estándar.

  • make profile-opt: compila Python utilizando la optimización guiada por perfiles (PGO). Puede usar la opción de configuración --enable-optimizations para hacer que este sea el objetivo predeterminado del comando make (make all o simplemente make).

  • make buildbottest: compila Python y ejecuta el conjunto de pruebas de Python, de la misma manera que los buildbots prueban Python. Configure la variable TESTTIMEOUT (en segundos) para cambiar el tiempo de espera de la prueba (1200 por defecto: 20 minutos).

  • make install: Compila e instala Python.

  • make regen-all: regenera (casi) todos los archivos generados; make regen-stdlib-module-names y autoconf deben ejecutarse por separado para los archivos generados restantes.

  • make clean: elimina los archivos compilados.

  • make distclean: Similar a make clean, pero elimina también los archivos creados por el script de configuración.

3.2.4. Extensiones C

Algunas extensiones de C están construidas como módulos incorporadas, como el módulo sys. Están compiladas con la macro definida Py_BUILD_CORE_BUILTIN. Los módulos incorporados no tienen el 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__'

Otras extensiones de C se construyen como bibliotecas dinámicas, como el módulo _asyncio. Están compiladas con la macro definida Py_BUILD_CORE_MODULE. Ejemplo en 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 se usa para generar objetivos Makefile para compilar extensiones C. Al principio de los archivos, las extensiones C se crean como módulos incorporados. Las extensiones definidas después del marcador *shared* se crean como bibliotecas dinámicas.

El script setup.py solo crea extensiones C como bibliotecas compartidas usando el módulo distutils.

Las macros PyAPI_FUNC(), PyAPI_API() y PyMODINIT_FUNC() de Include/pyport.h se definen de manera diferente dependiendo si es definida la macro Py_BUILD_CORE_MODULE:

  • Use Py_EXPORTED_SYMBOL si Py_BUILD_CORE_MODULE es definido

  • Use Py_IMPORTED_SYMBOL de lo contrario.

Si la macro Py_BUILD_CORE_BUILTIN se usa por error en una extensión de C compilada como una biblioteca compartida, su función PyInit_xxx() no se exporta, provocando un ImportError en la importación.

3.3. Banderas de compilador y vinculación

Opciones establecidas por el script ./configure y las variables de entorno y utilizadas por Makefile.

3.3.1. Banderas del preprocesador

CONFIGURE_CPPFLAGS

Valor de la variable CPPFLAGS pasado al script ./configure.

Nuevo en la versión 3.6.

CPPFLAGS

(Objetivo) Indicadores del preprocesador C/C++, p. ej. -I<include dir> si tiene encabezados en un directorio no estándar <include dir>.

Ambos CPPFLAGS y LDFLAGS necesitan contener el valor del shell para setup.py para poder compilar módulos de extensión usando los directorios especificados en las variables de entorno.

BASECPPFLAGS

Nuevo en la versión 3.4.

PY_CPPFLAGS

Se agregaron indicadores de preprocesador adicionales para construir los archivos de objeto del intérprete.

Por defecto: $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS).

Nuevo en la versión 3.2.

3.3.2. Banderas del compilador

CC

Comando del compilador C.

Ejemplo: gcc -pthread.

MAINCC

Comando del compilador de C usado para construir la función main() de programas como python.

Variable establecida por la opción --with-cxx-main del script de configuración.

Por defecto: $(CC).

CXX

Comando del compilador de C++.

Se usa si se usa la opción --with-cxx-main.

Ejemplo: g++ -pthread.

CFLAGS

Banderas del compilador de C.

CFLAGS_NODIST

CFLAGS_NODIST se usa para compilar el intérprete y las extensiones stdlib C. Úselo cuando una bandera del compilador no sea parte de distutils CFLAGS una vez que Python esté instalado (bpo-21121).

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.

Nuevo en la versión 3.5.

EXTRA_CFLAGS

Banderas adicionales del compilador de C.

CONFIGURE_CFLAGS

Valor de la variable CFLAGS pasada al script ./configure.

Nuevo en la versión 3.2.

CONFIGURE_CFLAGS_NODIST

Valor de la variable CFLAGS_NODIST pasada al script ./configure.

Nuevo en la versión 3.5.

BASECFLAGS

Banderas base del compilador.

OPT

Banderas de optimización.

CFLAGS_ALIASING

Banderas de alias estrictos o no estrictos que se utilizan para compilar Python/dtoa.c.

Nuevo en la versión 3.7.

CCSHARED

Banderas del compilador que se utilizan para compilar una biblioteca compartida.

Por ejemplo, -fPIC se usa en Linux y BSD.

CFLAGSFORSHARED

Se agregaron banderas C adicionales para compilar los archivos de objeto del intérprete.

Por defecto: $(CCSHARED) cuando se usa --enable-shared, o una cadena de caracteres vacía en caso contrario.

PY_CFLAGS

Por defecto: $(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS).

PY_CFLAGS_NODIST

Por defecto: $(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal.

Nuevo en la versión 3.5.

PY_STDMODULE_CFLAGS

Banderas de C que se utilizan para compilar los archivos de objeto del intérprete.

Por defecto: $(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED).

Nuevo en la versión 3.7.

PY_CORE_CFLAGS

Por defecto: $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE.

Nuevo en la versión 3.2.

PY_BUILTIN_MODULE_CFLAGS

Banderas del compilador para construir un módulo de extensión de biblioteca estándar como un módulo incorporado, como el módulo posix.

Por defecto: $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN.

Nuevo en la versión 3.8.

PURIFY

Comando Purify. Purify es un programa de depuración de memoria.

Por defecto: cadena de caracteres vacía (no utilizado).

3.3.3. Banderas de vinculación

LINKCC

Comando de vinculación usado para compilar programas como python y _testembed.

Por defecto: $(PURIFY) $(MAINCC).

CONFIGURE_LDFLAGS

Valor de la variable LDFLAGS pasada al script ./configure.

Evite asignar CFLAGS, LDFLAGS, etc. así los usuarios pueden usarlos en la línea de comando para agregar estos valores sin pisar los valores preestablecidos.

Nuevo en la versión 3.2.

LDFLAGS_NODIST

LDFLAGS_NODIST se usa de la misma manera que CFLAGS_NODIST. Usar cuando una bandera del enlazador no sea parte de distutils LDFLAGS una vez que Python esté instalado (bpo-35257).

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

Valor de la variable LDFLAGS_NODIST pasado al script ./configure.

Nuevo en la versión 3.8.

LDFLAGS

Banderas de vinculación, p. ej. -L<lib dir> si tiene bibliotecas en un directorio no estándar <lib dir>.

Ambos CPPFLAGS y LDFLAGS necesitan contener el valor del shell para setup.py para poder compilar módulos de extensión usando los directorios especificados en las variables de entorno.

LIBS

Banderas de vinculación para pasar bibliotecas al vinculador al enlazar el ejecutable de Python.

Ejemplo: -lrt.

LDSHARED

Comando para construir una biblioteca compartida.

Por defecto: @LDSHARED@ $(PY_LDFLAGS).

BLDSHARED

Comando para compilar la biblioteca compartida libpython.

Por defecto: @BLDSHARED@ $(PY_CORE_LDFLAGS).

PY_LDFLAGS

Por defecto: $(CONFIGURE_LDFLAGS) $(LDFLAGS).

PY_LDFLAGS_NODIST

Por defecto: $(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST).

Nuevo en la versión 3.8.

PY_CORE_LDFLAGS

Banderas de vinculación que se utilizan para crear los archivos de objeto del intérprete.

Nuevo en la versión 3.8.