3. Configurar Python

3.1. Requisitos de compilación

Features and minimum versions required to build CPython:

  • Un compilador C11. Características opcionales de C11 no son necesarias.

  • En Windows, se necesita Microsoft Visual Studio 2017 o posterior.

  • Soporte para números en coma flotante IEEE 754 y Not-a-Number (NaN) en coma flotante.

  • Soporte para hilos.

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

Distinto en la versión 3.1: Tcl/Tk version 8.3.1 is now required.

Distinto en la versión 3.5: On Windows, Visual Studio 2015 or later is now required. Tcl/Tk version 8.4 is now required.

Distinto en la versión 3.6: Ahora se necesitan características seleccionadas de C99, como <stdint.h> y funciones static inline.

Distinto en la versión 3.7: Ahora se necesita soporte de hilos y OpenSSL 1.0.2.

Distinto en la versión 3.10: OpenSSL 1.1.1 is now required. Require SQLite 3.7.15.

Distinto en la versión 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.

Distinto en la versión 3.13: Autoconf 2.71, aclocal 1.16.4 and SQLite 3.15.2 are now required.

Ver también PEP 7 «Style Guide for C Code» y PEP 11 «CPython platform support».

3.2. Archivos generados

Para reducir las dependencias de compilación, el código fuente de Python contiene varios archivos generados. Comandos para regenerar todos los archivos generados:

make regen-all
make regen-stdlib-module-names
make regen-limited-abi
make regen-configure

El archivo Makefile.pre.in documenta archivos generados, sus entradas y las herramientas que se usaron para regenerarlos. Busque los objetivos make regen-*.

3.2.1. configure script

The make regen-configure command regenerates the aclocal.m4 file and the configure script using the Tools/build/regen-configure.sh shell script which uses an Ubuntu container to get the same tools versions and have a reproducible output.

The container is optional, the following command can be run locally:

autoreconf -ivf -Werror

The generated files can change depending on the exact autoconf-archive, aclocal and pkg-config versions.

3.3. Configurar opciones

List all configure script options using:

./configure --help

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

3.3.1. Opciones generales

--enable-loadable-sqlite-extensions

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

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.

Por defecto, el tamaño del dígito es 30.

Define el PYLONG_BITS_IN_DIGIT en 15 o 30.

Consultar sys.int_info.bits_per_digit.

--with-suffix=SUFFIX

Establece el sufijo ejecutable de Python en SUFFIX.

El sufijo predeterminado es .exe en Windows y macOS (ejecutable python.exe), .js en el nodo Emscripten, .html en el navegador Emscripten, .wasm en WASI y una cadena vacía en otras plataformas (ejecutable python).

Distinto en la versión 3.11: El sufijo predeterminado en la plataforma WASM es uno de .js, .html o .wasm.

--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=<list of backend names>

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.

--without-freelists

Deshabilita todas las listas libres excepto la tupla única vacía.

Nuevo en la versión 3.11.

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

--with-pkg-config=[check|yes|no]

Si configure debe usar pkg-config para detectar dependencias de compilación.

  • check (predeterminado): pkg-config es opcional

  • yes: pkg-config es obligatorio

  • no: configure no usa pkg-config incluso cuando está presente

Nuevo en la versión 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.

Efectos:

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

Usa Tools/scripts/summarize_stats.py para leer las estadí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.

Nuevo en la versión 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».

Nuevo en la versión 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

Comando del compilador C.

CFLAGS

Banderas del compilador de C.

CPP

C preprocessor command.

CPPFLAGS

C preprocessor flags, e.g. -Iinclude_dir.

3.3.3. Opciones del enlazador

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

Nuevo en la versión 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.

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. Opciones de WebAssembly

--with-emscripten-target=[browser|node]

Establezca el tipo de compilación para wasm32-emscripten.

  • browser (predeterminado): precarga mínima stdlib, MEMFS predeterminado.

  • node: soporte para NODERAWFS y pthread.

Nuevo en la versión 3.11.

--enable-wasm-dynamic-linking

Active la compatibilidad con enlaces dinámicos para WASM.

La vinculación dinámica habilita dlopen. El tamaño del archivo del ejecutable aumenta debido a la eliminación limitada de código muerto y características adicionales.

Nuevo en la versión 3.11.

--enable-wasm-pthreads

Active la compatibilidad con pthreads para WASM.

Nuevo en la versión 3.11.

3.3.6. Opciones de instalación

--prefix=PREFIX

Instala archivos independientes de la arquitectura en PREFIX. En Unix, el valor predeterminado es /usr/local.

Este valor se puede recuperar en tiempo de ejecución al usar sys.prefix.

Como ejemplo, se puede utilizar --prefix="$HOME/.local/" para instalar Python en su directorio raíz.

--exec-prefix=EPREFIX

Instala archivos independientes de la arquitectura en EPREFIX, el valor predeterminado es --prefix.

Este valor se puede recuperar en tiempo de ejecución al usar 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.3.7. Opciones de desempeño

Se recomienda configurar Python usando --enable-optimizations --with-lto (PGO + LTO) para obtener el mejor rendimiento. El indicador experimental --enable-bolt también se puede usar para mejorar el 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.

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.

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.

Distinto en la versión 3.13: Task failure is no longer ignored silently.

--with-lto=[full|thin|no|yes]

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.

Nuevo en la versión 3.11: Para usar la función ThinLTO, use --with-lto=thin en Clang.

Distinto en la versión 3.12: Utiliza ThinLTO como política de optimización predeterminada en Clang si el compilador acepta el indicador.

--enable-bolt

Habilita el uso del optimizador binario post-enlace BOLT (deshabilitado de forma predeterminada).

BOLT es parte del proyecto LLVM pero no siempre se incluye en sus distribuciones binarias. Este indicador necesita que llvm-bolt y merge-fdata estén disponibles.

BOLT aún es un proyecto bastante nuevo, así que este indicador debería considerarse experimental por ahora. Debido a que esta herramienta opera en código máquina, su éxito depende de una combinación del entorno de compilación + los otros argumentos de configuración de optimización + la arquitectura del CPU, y no todas las combinaciones son compatibles. Se sabe que las versiones de BOLT anteriores a LLVM 16 bloquean BOLT en algunos escenarios. Se recomienda encarecidamente utilizar LLVM 16 o posterior para la optimización de BOLT.

Las variables configure BOLT_INSTRUMENT_FLAGS y BOLT_APPLY_FLAGS se pueden definir para sobrescribir el conjunto predeterminado de argumentos de llvm-bolt para instrumentar y aplicar datos BOLT a binarios, respectivamente.

Nuevo en la versión 3.12.

BOLT_APPLY_FLAGS

Arguments to llvm-bolt when creating a BOLT optimized binary.

Nuevo en la versión 3.12.

BOLT_INSTRUMENT_FLAGS

Arguments to llvm-bolt when instrumenting binaries.

Nuevo en la versión 3.12.

--with-computed-gotos

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

--without-mimalloc

Disable the fast mimalloc allocator mimalloc (enabled by default).

Consultar también la variable de entorno PYTHONMALLOC.

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

--with-strict-overflow

Agrega -fstrict-overflow a los indicadores del compilador de C (el valor predeterminado que agregamos en su lugar es -fno-strict-overflow).

3.3.8. 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 opción de línea de comando -d y la variable de entorno PYTHONDEBUG para depurar el analizador.

  • Agregue soporte para la variable __lltrace__: habilite el seguimiento 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.

  • Agregue 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 (vea 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.

    • Verifique que las funciones de desasignador no cambien la excepción actual.

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

The PYTHONDUMPREFS environment variable can be used to dump objects and reference counts still alive at Python exit.

Statically allocated objects are not traced.

Nuevo en la versión 3.8.

Distinto en la versión 3.13: This build is now ABI compatible with release build and debug build.

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

--with-thread-sanitizer

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

Nuevo en la versión 3.13.

3.3.10. 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.3.11. 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-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=readline|editline

Designate a backend library for the readline module.

  • readline: Use readline as the backend.

  • editline: Use editline as the backend.

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-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.3.12. Opciones de seguridad

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

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

  • siphash13 (por defecto);

  • siphash24;

  • fnv.

Nuevo en la versión 3.4.

Nuevo en la versión 3.11: Se agrega siphash13 y es el nuevo valor predeterminado.

--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.3.13. Opciones macOS

See 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.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. Opciones de compilación cruzada

La compilación cruzada, también conocida como construcción cruzada, se puede usar para construir Python para otra plataforma o arquitectura de CPU. La compilación cruzada requiere un intérprete de Python para la plataforma de compilación. La versión de Python de compilación debe coincidir con la versión de Python host de compilación cruzada.

--build=BUILD

configure para construir en BUILD, generalmente adivinado por config.guess.

--host=HOST

compilación cruzada para crear programas que se ejecuten en HOST (plataforma de destino)

--with-build-python=path/to/python

ruta para construir el binario python para compilación cruzada

Nuevo en la versión 3.11.

CONFIG_SITE=file

Una variable de entorno que apunta a un archivo con anulaciones de configuración.

Example config.site file:

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

Nuevo en la versión 3.11.

Ejemplo de compilación 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 compilación Python

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

3.4.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 Modules/Setup).

3.4.3. Objetivos principales de Makefile

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

Las macros PyAPI_FUNC(), PyAPI_DATA() y PyMODINIT_FUNC de Include/exports.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.5. Banderas de compilador y vinculación

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

3.5.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. -Iinclude_dir si tiene encabezados en un directorio no estándar include_dir.

Ambos CPPFLAGS y LDFLAGS necesitan contener el valor del shell 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.5.2. Banderas del compilador

CC

Comando del compilador C.

Ejemplo: gcc -pthread.

CXX

Comando del compilador de C++.

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 un indicador del compilador no deba ser parte de CFLAGS una vez que Python esté instalado (gh-65320).

En particular, CFLAGS no debe contener:

  • el indicador del compilador -I (para configurar la ruta de búsqueda de archivos de inclusión). Los indicadores -I se procesan de izquierda a derecha, y cualquier indicador en CFLAGS tendrá prioridad sobre los indicadores -I proporcionados por el usuario y el paquete.

  • banderas de endurecimiento como -Werror porque las distribuciones no pueden controlar si los paquetes instalados por los usuarios cumplen con estándares tan elevados.

Nuevo en la versión 3.5.

COMPILEALL_OPTS

Las opciones pasadas a la línea de comando compileall al crear archivos PYC en make install. El valor predeterminado: -j0.

Nuevo en la versión 3.12.

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.5.3. Banderas de vinculación

LINKCC

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

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

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 un indicador del enlazador no deba ser parte de LDFLAGS una vez que Python esté instalado (gh-65320).

En particular, LDFLAGS no debe contener:

  • el indicador del compilador -L (para establecer la ruta de búsqueda de bibliotecas). Los indicadores -L se procesan de izquierda a derecha, y cualquier indicador en LDFLAGS tendrá prioridad sobre los indicadores -L proporcionados por el usuario y el paquete.

CONFIGURE_LDFLAGS_NODIST

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

Nuevo en la versión 3.8.

LDFLAGS

Indicadores de vinculación, p. ej. -Llib_dir si tiene bibliotecas en un directorio no estándar lib_dir.

Ambos CPPFLAGS y LDFLAGS necesitan contener el valor del shell 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.

Footnotes