# 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

  Support loadable extensions in the `_sqlite` extension module (default is no) of the `sqlite3` module.

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

  Select the default time zone search path for `zoneinfo.TZPATH`. See the Compile-time configuration of the `zoneinfo` module.

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

  See `decimal.HAVE_CONTEXTVAR` and the `contextvars` module.

  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.

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

  Some Linux distribution packaging policies recommend against bundling dependencies. For example, Fedora installs wheel packages in the `/usr/share/python-wheels/` directory and don’t install the `ensurepip._bundled` package.

  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

  Active la recopilación de estadísticas internas.

  Las estadísticas se volcarán en un archivo arbitrario (probablemente único) en `/tmp/py_stats/` o `C:\temp\py_stats\` en Windows.

  Usa `Tools/scripts/summarize_stats.py` para leer las estadísticas.

  Nuevo en la versión 3.11.

### 3.1.2. 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.1.3. Opciones de instalación

--prefix=PREFIX

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

  This value can be retrieved 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 retrieved at runtime using `sys.exec_prefix`.

--disable-test-modules

  Don’t build nor install test modules, like the `test` package or the `_testcapi` extension module (built and installed by default).

  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.4. 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=[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.

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

- Add `sys.gettotalrefcount()` function.

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

- Agrega la variable de entorno `PYTHONTHREADDEBUG`.

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

  - The `Py_SAFE_DOWNCAST()` macro checks for integer underflow and overflow when downcasting from wide types to narrow types.

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

  - Add `sys.getobjects()` function.

  - 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.7. 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.8. Opciones de bibliotecas

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

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

--with-system-expat

  Build the `pyexpat` module using an installed `expat` library (default is 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-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.9. 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.1.10. 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.1.11. 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

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

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.

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

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

- Use `Py_EXPORTED_SYMBOL` si `Py_BUILD_CORE_MODULE` es definido

- Use `Py_IMPORTED_SYMBOL` de lo contrario.

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

  (Objective) C/C++ preprocessor flags, e.g. `-Iinclude_dir` if you have headers in a nonstandard directory 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).

  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.

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

  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

  Linker flags, e.g. `-Llib_dir` if you have libraries in a nonstandard directory 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.