sysconfig en Python: rutas y build

Publicado el: 27/08/2026
Tempo de leitura: 6 minutos
High-angle view of woman coding on a laptop, with a Python book nearby. Ideal for programming and tech content.

El módulo sysconfig expone información sobre la instalación actual de Python: directorios de biblioteca, destinos de paquetes, headers, scripts, datos, variables de compilación, plataforma, schemes de instalación y sufijos de extensiones. Es útil para herramientas de build, instaladores, diagnóstico de entornos, packaging e integración con código nativo.

Las aplicaciones normales rara vez necesitan construir rutas de instalación manualmente. Usa importlib para localizar módulos, importlib.resources para recursos y herramientas de packaging para instalar dependencias. sysconfig corresponde cuando el objetivo es comprender o automatizar detalles de la propia instalación de Python.

El runtime actual

Los resultados describen el intérprete que está ejecutando el script. Esto importa cuando hay varios Pythons, entornos virtuales, builds debug, instalaciones del sistema y distribuciones personalizadas.

import sys
import sysconfig

print(sys.executable)
print(sysconfig.get_platform())
print(sysconfig.get_python_version())

Registra el ejecutable junto con el diagnóstico para no analizar el entorno equivocado.

Schemes de instalación

Un scheme es un conjunto nombrado de templates de rutas para diferentes categorías de archivos.

import sysconfig

print(sysconfig.get_scheme_names())

Los nombres disponibles cambian según plataforma y distribución. No codifiques una lista universal.

Categorías de rutas

get_path_names() muestra categorías como stdlib, platstdlib, purelib, platlib, include, platinclude, scripts y data.

print(sysconfig.get_path_names())

Varias categorías pueden resolver al mismo directorio en una instalación concreta.

stdlib y platstdlib

stdlib identifica la biblioteca estándar independiente del layout de extensiones. platstdlib representa contenido dependiente de plataforma.

No modifiques esos directorios en runtime. Las instalaciones de sistema pueden ser read-only o gestionadas por el package manager.

purelib y platlib

purelib es el destino habitual de paquetes Python puros. platlib se usa para paquetes con componentes dependientes de plataforma.

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

Pueden ser iguales en una instalación y diferentes en otra.

include y platinclude

Estas categorías localizan headers necesarios para compilar extensiones C o embeber Python.

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

Una herramienta debe verificar que existan. Algunos sistemas requieren un paquete de desarrollo separado.

scripts

La ruta scripts indica dónde se instalan entry points de línea de comandos.

No modifiques el PATH del usuario automáticamente. Informa la ubicación y proporciona instrucciones claras.

data

La categoría data funciona como base para datos generales del scheme.

No la uses para localizar recursos dentro de un paquete importado. Utiliza importlib.resources.

get_paths

get_paths() devuelve todas las rutas expandidas.

rutas = sysconfig.get_paths()
for nombre, ruta in sorted(rutas.items()):
    print(f"{nombre}: {ruta}")

Es útil para diagnóstico y build, pero no garantiza que todos los directorios existan o permitan escritura.

Selecciona un scheme

Las funciones aceptan un nombre explícito.

rutas = sysconfig.get_paths(scheme="posix_prefix")

Comprueba get_scheme_names(). Un nombre de POSIX no es portable a Windows.

Variables de templates

Los templates se expanden con variables de configuración. Un mapping vars puede simular otro prefijo.

rutas = sysconfig.get_paths(
    vars={"base": "/opt/app", "platbase": "/opt/app"}
)

Una simulación no es necesariamente una instalación válida. Usa packaging para instalar realmente.

get_path

get_path(name) es cómodo cuando solo necesitas una categoría.

directorio_scripts = sysconfig.get_path("scripts")

Valida nombres y maneja diferencias entre versiones.

Variables de configuración

get_config_vars() devuelve valores usados para configurar y compilar el intérprete.

variables = sysconfig.get_config_vars()
print(variables.get("CC"))
print(variables.get("CFLAGS"))
print(variables.get("EXT_SUFFIX"))

Los valores dependen de la instalación y pueden ser strings, números o None.

get_config_var

Usa get_config_var(name) para una sola variable.

sufijo = sysconfig.get_config_var("EXT_SUFFIX")

No supongas que todas existen en todas las plataformas. Maneja None.

Compilador y flags

Variables como CC, CXX, CFLAGS, LDFLAGS y nombres de bibliotecas ayudan a herramientas nativas.

No combines esas strings con entrada no confiable y las envíes a shell. Haz parsing controlado y usa listas de argumentos.

EXT_SUFFIX

EXT_SUFFIX informa el sufijo esperado de extensiones compiladas.

print(sysconfig.get_config_var("EXT_SUFFIX"))

Puede incluir ABI, arquitectura y detalles de librería. No lo reemplaces por .so o .pyd fijos.

SOABI

SOABI identifica información de ABI usada en nombres de extensiones.

Que SOABI coincida no prueba compatibilidad total. Sistema, arquitectura, librerías y build también importan.

Biblioteca compartida

Variables de build indican si Python usa shared library y cómo se llama.

Distribuciones personalizadas pueden cambiar valores. Prueba linking y embedding en el target real.

get_platform

get_platform() devuelve una string usada en contextos de build y packaging.

plataforma = sysconfig.get_platform()

No es identidad de seguridad ni sustituye detección de capacidades.

get_python_version

Devuelve la versión corta principal.secundaria usada en rutas.

Para detalles completos, combínala con sys.version_info y platform.python_implementation().

Entornos virtuales

Dentro de un venv, varias rutas apuntan al entorno mientras información de build continúa ligada al intérprete base.

import sys

print(sys.prefix)
print(sys.base_prefix)

Prueba en un venv real. No asumas que todas las rutas comienzan con sys.prefix.

Instalaciones del sistema

Distribuciones Linux pueden personalizar schemes para su gestor de paquetes. Escribir manualmente en ubicaciones del sistema puede romper el entorno.

Usa entornos virtuales o el método recomendado por la distribución.

Windows

Windows usa schemes distintos de POSIX. Layout de scripts, sufijos de extensiones y tags de ABI siguen sus propias convenciones.

Prueba rutas con espacios y Unicode. Pasa argumentos al compilador como lista.

macOS

Builds framework, universal binaries y arquitecturas pueden alterar rutas y flags.

No copies configuración de Intel a Apple Silicon o al revés sin validación.

Cross compilation

sysconfig describe principalmente el Python que se ejecuta. En cross compilation, host y target son diferentes.

Usa configuración específica del target y la toolchain del proyecto. Los valores del host no son automáticamente válidos.

Diagnóstico

El módulo puede ejecutarse desde línea de comandos para mostrar información, según la versión.

Un informe de soporte debería incluir ejecutable, output relevante y versión de packaging sin exponer secretos.

Packaging moderno

Build backends e instaladores ya usan abstracciones apropiadas. Una aplicación no debería copiar archivos directamente a purelib.

Usa pyproject.toml, wheels e instaladores soportados. sysconfig informa; no reemplaza packaging.

Extensiones C

Un build nativo puede consultar includes y flags, pero debería apoyarse en setuptools, Meson, CMake o el backend elegido.

Esto facilita wheels y aislamiento.

Permisos

Una ruta devuelta puede ser read-only. Comprueba antes de escribir y no solicites elevación automáticamente.

Ante falta de permisos, recomienda venv, no chmod 777.

Manejo de rutas

Convierte el texto en pathlib.Path al operar con filesystem.

from pathlib import Path

include = Path(sysconfig.get_path("include"))
if not include.is_dir():
    raise RuntimeError("headers de Python no encontrados")

No resuelvas symlinks sin necesidad; el layout puede depender de ellos.

Cache de resultados

Los valores suelen ser estables durante el proceso. Puedes cachearlos localmente, pero no reutilizarlos para otro intérprete.

Incluye sys.executable y versión en la clave.

Seguridad

Comandos del compilador y flags provienen de la configuración. En un entorno comprometido pueden apuntar a ejecutables inesperados.

Las herramientas de build deben aislarse, registrar comandos y evitar shell con entrada hostil.

Pruebas

Prueba Windows, Linux, macOS, venv, instalación global, paths con espacios, headers ausentes y directorios read-only.

No hagas assertions con rutas absolutas fijas. Verifica propiedades.

Errores comunes

Los fallos frecuentes son codificar site-packages, confundir purelib y platlib, asumir que todos los directorios existen, escribir en Python de sistema, usar valores del host en cross compilation, fijar .so, ignorar venv y ejecutar flags mediante shell.

Conclusión

sysconfig es la fuente oficial de rutas, schemes y variables de build del runtime actual. Úsalo para diagnóstico e integración nativa considerando plataforma, venv, permisos y compatibilidad.

Usa herramientas de packaging en vez de copiar archivos manualmente. Consulta la documentación oficial de sysconfig y contextlib en Python para gestión de recursos.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Rack de servidores que representa el balanceo de conexiones con SO_REUSEPORT_LB en Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    SO_REUSEPORT_LB: reparte conexiones entre workers

    Aprende SO_REUSEPORT_LB en Python para distribuir conexiones entre workers con pruebas, portabilidad y cierre ordenado.

    Ler mais

    Tempo de leitura: 5 minutos
    11/10/2026
    Código Python asíncrono en un portátil para inspect.markcoroutinefunction
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    markcoroutinefunction: detecta wrappers async

    Aprende inspect.markcoroutinefunction en Python para identificar wrappers asíncronos, integrar frameworks y evitar detecciones incorrectas.

    Ler mais

    Tempo de leitura: 5 minutos
    10/10/2026
    Código Python para recorrer carpetas y archivos con Path.walk
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    Path.walk: recorre directorios con seguridad

    Aprende Path.walk en Python para recorrer directorios, filtrar archivos, tratar errores y controlar la travesía con seguridad.

    Ler mais

    Tempo de leitura: 5 minutos
    10/10/2026
    Depuración de un proceso Python en terminal con código
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    pdb -p: depura procesos Python en ejecución

    Aprende a conectar pdb a un proceso Python en ejecución, inspeccionar la pila y diagnosticar bloqueos de forma segura.

    Ler mais

    Tempo de leitura: 6 minutos
    09/10/2026
    Código Python para representar fracciones exactas
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    fractions.from_number: convierte números en fracciones

    Aprende fractions.from_number en Python para convertir números en fracciones exactas, controlar precisión, validar entradas y evitar redondeos inesperados.

    Ler mais

    Tempo de leitura: 4 minutos
    09/10/2026
    Desarrollador configurando un servidor HTTPS y certificado TLS con Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    HTTPSServer: crea un servidor HTTPS local en Python

    Aprende HTTPSServer en Python para crear servicios HTTPS locales, configurar certificados, usar hilos y comprender sus límites.

    Ler mais

    Tempo de leitura: 4 minutos
    08/10/2026