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

    Código binario verde sobre el teclado de un portátil, representando datos internos de Python.
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    marshal en Python: formato interno

    Aprende marshal en Python para objetos internos y bytecode, con versiones, allow_code, caches descartables, límites y riesgos de entrada no

    Ler mais

    Tempo de leitura: 6 minutos
    27/08/2026
    Vibrant assortment of pickled vegetables in jars with red fabric covers, displayed on shelves.
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    copyreg en Python: personaliza pickle

    Aprende copyreg en Python para personalizar pickle, registrar reducers, versionar estado, evitar conflictos globales y serializar con seguridad.

    Ler mais

    Tempo de leitura: 6 minutos
    27/08/2026
    A developer typing code on a laptop with a Python book beside in an office.
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    reprlib en Python: objetos resumidos

    Aprende reprlib en Python para resumir listas, strings y objetos recursivos, limitar logs y crear representaciones seguras y legibles.

    Ler mais

    Tempo de leitura: 6 minutos
    27/08/2026
    Close-up view of a computer screen displaying code in a software development environment.
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    graphlib en Python: orden topológico

    Aprende graphlib en Python para ordenar dependencias, detectar ciclos, ejecutar tareas listas en paralelo y crear pipelines seguros.

    Ler mais

    Tempo de leitura: 7 minutos
    27/08/2026
    Close-up view of a computer screen displaying code in a software development environment.
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    weakref: evita retener objetos en cachés

    Aprende weakref en Python para referencias débiles, caches, WeakSet, WeakMethod, finalize, callbacks y evitar retención accidental.

    Ler mais

    Tempo de leitura: 7 minutos
    27/08/2026
    A top view of stacked timber logs showcasing natural textures and patterns.
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    contextlib en Python: gestiona recursos

    Aprende contextlib en Python con contextmanager, ExitStack, suppress, closing, asynccontextmanager y cleanup seguro de recursos.

    Ler mais

    Tempo de leitura: 7 minutos
    27/08/2026