sysconfig en Python: rutas y build

Publicado el: 09/08/2026
Tempo de leitura: 6 minutos
Código y compilador que representan rutas y variables de build con sysconfig en Python

Las herramientas de packaging, instaladores, extensiones nativas y utilidades de diagnóstico necesitan saber dónde guarda el Python actual sus bibliotecas, scripts, headers y datos. Esas rutas cambian entre Linux, macOS, Windows, instalaciones del sistema, builds personalizados y entornos virtuales. sysconfig en Python ofrece la API oficial para consultar esta información sin codificar rutas fijas.

El módulo también expone variables utilizadas para compilar el intérprete y extensiones C de terceros, como compiladores, flags, directorios de bibliotecas e información ABI. Esta guía explica esquemas de instalación, purelib, platlib, virtualenvs, identificadores de plataforma, variables de build, headers y diagnóstico por línea de comandos.

El contenido complementa nuestras guías sobre py_compile, compileall, types, importlib.resources y zoneinfo.

Por qué fallan las rutas fijas

Una ruta como /usr/local/lib/python3.14/site-packages puede funcionar en un equipo y fallar en otro. Las distribuciones Linux, Homebrew, pyenv, Microsoft Store, frameworks de macOS, containers y entornos virtuales usan layouts diferentes.

Consulta el intérprete que realmente ejecutará o construirá el código. Sysconfig describe esa instalación concreta.

Listar las rutas de instalación

import sysconfig

rutas = sysconfig.get_paths()
for nombre, ruta in rutas.items():
    print(nombre, ruta)

El resultado incluye biblioteca estándar, paquetes, scripts, headers y datos. Los valores dependen del esquema activo.

purelib y platlib

purelib es el destino de paquetes Python independientes de la plataforma. platlib recibe componentes específicos, especialmente extensiones compiladas.

print(sysconfig.get_path("purelib"))
print(sysconfig.get_path("platlib"))

Algunas instalaciones usan la misma ruta para ambos conceptos. No lo supongas en una herramienta portable.

stdlib y platstdlib

stdlib identifica la biblioteca estándar independiente de la plataforma. platstdlib identifica componentes específicos del sistema.

Estas rutas describen Python; no son directorios generales para configuración, uploads o datos mutables de la aplicación.

Directorio de scripts

scripts = sysconfig.get_path("scripts")

Los instaladores colocan entry points y ejecutables en este directorio. En POSIX suele ser bin; en Windows, Scripts.

Una herramienta puede informar la ruta cuando un comando no está en PATH, pero no debería modificar la configuración global del shell sin permiso.

Headers de la API C

include = sysconfig.get_path("include")
platinclude = sysconfig.get_path("platinclude")

Estas rutas son importantes para compilar extensiones o embeber Python. Un build personalizado puede separar headers generales y específicos.

Verifica que los archivos existan. Una imagen runtime mínima puede no incluir paquetes de desarrollo.

Esquema predeterminado

esquema = sysconfig.get_default_scheme()
print(esquema)

Desde Python 3.11, un intérprete dentro de un entorno virtual normalmente devuelve venv.

Listar esquemas disponibles

for esquema in sysconfig.get_scheme_names():
    print(esquema)

Entre los nombres habituales aparecen posix_prefix, posix_user, posix_home, nt, nt_user y venv. Los redistribuidores pueden personalizar preferencias.

Elegir un esquema preferido

usuario = sysconfig.get_preferred_scheme("user")
prefijo = sysconfig.get_preferred_scheme("prefix")
home = sysconfig.get_preferred_scheme("home")

Prefiere esta API pública a las tablas internas, porque un proveedor del sistema puede separar paquetes gestionados por el SO y por pip.

Consultar un esquema concreto

rutas_usuario = sysconfig.get_paths(
    scheme=sysconfig.get_preferred_scheme("user")
)

Conocer una ruta no demuestra que el proceso pueda escribir en ella. Comprueba permisos por separado.

Templates y expansión

Los esquemas almacenan plantillas con variables como {base}, {platbase} y {py_version_short}. get_path() las expande por defecto.

template = sysconfig.get_path(
    "stdlib",
    expand=False,
)

La forma sin expandir es útil para estudiar el layout, no para abrirla como ruta real.

Sustituir variables

ruta = sysconfig.get_path(
    "purelib",
    scheme="posix_prefix",
    vars={"base": "/opt/python", "platbase": "/opt/python"},
)

Esto puede ayudar en staging y construcción de imágenes. No permitas que entrada externa seleccione un destino arbitrario.

Variables de configuración

variables = sysconfig.get_config_vars()
print(variables.get("CC"))
print(variables.get("LIBDIR"))

El diccionario reúne valores del Makefile y de pyconfig.h cuando corresponda. En Windows suele existir un conjunto menor.

El resultado completo puede revelar rutas internas. En soporte, selecciona únicamente las claves necesarias.

Consultar una variable

shared = sysconfig.get_config_var("Py_ENABLE_SHARED")
compilador = sysconfig.get_config_var("CC")

Una clave desconocida devuelve None. No la conviertas en la string "None" y la pases a una herramienta de build.

Varias variables

ar, cxx, cflags = sysconfig.get_config_vars(
    "AR", "CXX", "CFLAGS"
)

La lista conserva el orden de los argumentos. Cualquier elemento puede faltar según la plataforma.

Identificador de plataforma

plataforma = sysconfig.get_platform()
print(plataforma)

El valor se usa en directorios de build y distribuciones específicas. Ejemplos son linux-x86_64, win-amd64 y tags de macOS.

No es una descripción amigable. Usa platform para informes humanos.

Versión major.minor

version = sysconfig.get_python_version()

El resultado omite el patch. Usa sys.version_info cuando necesites esa precisión.

Detectar una árbol de build

if sysconfig.is_python_build():
    print("ejecutando desde el árbol de compilación")

Esto interesa a herramientas que participan en la construcción de CPython. Las aplicaciones normales rara vez deberían cambiar lógica de negocio por este valor.

Localizar pyconfig.h

header = sysconfig.get_config_h_filename()

El archivo contiene macros de configuración. Puede leerse para diagnóstico o build, pero no debe modificarse en la instalación activa.

Localizar el Makefile

makefile = sysconfig.get_makefile_filename()

La disponibilidad varía. Prefiere las funciones de alto nivel a analizar el archivo manualmente.

Analizar config.h

with open(header, encoding="utf-8", errors="surrogateescape") as archivo:
    valores = sysconfig.parse_config_h(archivo)

La función está diseñada para archivos del estilo config.h, no es un preprocesador C completo.

Entornos virtuales

Dentro de un venv, los paquetes y scripts apuntan al entorno mientras partes de la biblioteca estándar pueden permanecer en la instalación base. No reconstruyas rutas a partir de sys.prefix; consulta sysconfig.

Instalar paquetes

Sysconfig describe destinos usados por instaladores. Una aplicación no debería copiar módulos directamente a site-packages. Usa pip, wheels y backends de build para conservar metadatos y permitir desinstalación.

Extensiones nativas y ABI

Variables como EXT_SUFFIX, SOABI, CC, CFLAGS y LDSHARED ayudan a igualar la configuración del intérprete.

sufijo = sysconfig.get_config_var("EXT_SUFFIX")
soabi = sysconfig.get_config_var("SOABI")

No construyas una string de shell con esos valores. Usa una herramienta de build o una lista estructurada de argumentos.

Cross-compilation

El sysconfig del intérprete en ejecución describe principalmente ese intérprete. En compilación cruzada, host y target son diferentes. Usa los datos proporcionados por la toolchain del destino.

No supongas que get_platform() representa el target si lo ejecutas en el host.

Containers mínimos

Una imagen runtime puede no tener compilador, Makefile ni headers aunque sysconfig indique rutas conceptuales. Comprueba existencia antes de abrir o ejecutar.

Separa etapas de build y runtime al compilar wheels nativas.

Interfaz de línea de comandos

python -m sysconfig

El comando muestra plataforma, versión, esquema, rutas y variables. Es útil en CI y soporte. Revisa la salida antes de publicarla, porque puede revelar detalles internos.

Diagnóstico compacto

def diagnostico():
    return {
        "python": sysconfig.get_python_version(),
        "platform": sysconfig.get_platform(),
        "scheme": sysconfig.get_default_scheme(),
        "purelib": sysconfig.get_path("purelib"),
        "scripts": sysconfig.get_path("scripts"),
        "soabi": sysconfig.get_config_var("SOABI"),
    }

Recoge solo la información necesaria para el problema actual.

Pruebas portables

Evita afirmar una ruta absoluta concreta. Comprueba tipos, valores no vacíos, relaciones y existencia solo cuando el despliegue lo garantice.

def test_ruta_scripts():
    ruta = sysconfig.get_path("scripts")
    assert isinstance(ruta, str)
    assert ruta

Ejecuta la matriz en Windows, Linux, macOS y virtualenvs soportados.

Errores frecuentes

  • Codificar manualmente site-packages.
  • Confundir purelib y platlib.
  • Suponer que toda ruta existe o es escribible.
  • Pasar una variable ausente a un comando.
  • Copiar paquetes en lugar de usar packaging.
  • Ejecutar flags mediante una string de shell insegura.
  • Confundir host de build y target.
  • Publicar diagnósticos completos con rutas internas.

Buenas prácticas

  • Consulta el intérprete que ejecutará el código.
  • Usa esquemas preferidos.
  • Trata valores None.
  • Comprueba existencia y permiso por separado.
  • Usa packaging moderno.
  • Pasa comandos como argumentos estructurados.
  • Prueba virtualenvs y plataformas soportadas.
  • Recoge solo diagnóstico necesario.

Conclusión

sysconfig en Python es la fuente oficial para rutas de instalación, esquemas, variables de build, ABI e identificación de plataforma del intérprete activo. Evita suposiciones frágiles en herramientas de packaging, extensiones nativas y diagnósticos.

Usa la información como descripción del entorno, no como autorización para escribir. Combina sysconfig con packaging moderno, comprobaciones de permisos y pruebas multiplataforma. Consulta la documentación oficial de sysconfig y la guía oficial de packaging.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Teclado internacional que representa números, moneda y fechas con locale en Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    locale en Python: números, moneda y fechas

    Aprende locale en Python para formatear e interpretar números, moneda, fechas, encodings y orden cultural sin errores de concurrencia.

    Ler mais

    Tempo de leitura: 6 minutos
    09/08/2026
    Monitor y red que representan información del sistema con platform en Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    platform en Python: información del sistema

    Aprende platform en Python para identificar sistema operativo, arquitectura, distribución, versión de Python y entorno de ejecución.

    Ler mais

    Tempo de leitura: 5 minutos
    09/08/2026
    Disco duro que representa archivos mapeados en memoria con mmap en Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    mmap en Python: archivos en memoria

    Aprende mmap en Python para mapear archivos en memoria, buscar bytes, compartir datos y elegir lectura, escritura o copy-on-write.

    Ler mais

    Tempo de leitura: 6 minutos
    09/08/2026
    Código fuente que representa tokens y constantes del parser con el módulo token en Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    token en Python: constantes del parser

    Aprende token en Python para interpretar tipos léxicos, operadores exactos, indentación, f-strings, t-strings y parsers por versión.

    Ler mais

    Tempo de leitura: 7 minutos
    07/08/2026
    Código fuente que representa palabras reservadas y soft keywords en Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    keyword en Python: palabras reservadas

    Aprende keyword en Python para validar identificadores, palabras reservadas y soft keywords según la versión del intérprete.

    Ler mais

    Tempo de leitura: 7 minutos
    07/08/2026
    Arquitectura de software que representa clases abstractas con abc en Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    abc en Python: clases abstractas

    Aprende abc en Python para crear clases abstractas, métodos obligatorios, subclasses virtuales y contratos estables.

    Ler mais

    Tempo de leitura: 5 minutos
    06/08/2026