Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿node-gyp no encuentra Python? Demuestra la ruta antes de reinstalar

Rastrea el subproceso real de npm, la copia de node-gyp, el selector de Python y la compatibilidad antes de cambiar el entorno.

Ilustración original de Python instalado pasa por la selección de entorno de npm hacia la compilación nativa.
Ilustración original: Demuestra la ruta elegida por el proceso real. Watch at Ease

«Python funciona en mi terminal» y «node-gyp puede usar ese Python» son afirmaciones distintas. Primero demuestra el subproceso real de npm y la ruta de selección.

Sigue la primera etapa que falla—detección, compatibilidad o herramientas nativas—para que cada cambio sea limitado, verificable y reversible.

Congela el primer fallo y el contexto de instalación

Guarda la salida completa desde el primer gyp ERR! find Python hasta el comando final, junto con el directorio y las versiones. Anota si ocurrió en npm install, npm ci, un script, un contenedor o CI.

Conserva también la ruta del comando del registro. Que python3 funcione en un shell interactivo no demuestra que el subproceso de npm comparta PATH, usuario, entorno o copia de node-gyp.

Demuestra qué Node, npm y node-gyp se ejecutaron

En el contexto fallido registra node -p "process.execPath", las versiones y la ruta de node-gyp mostrada por gyp info. Revisa npm config get node_gyp y el script de instalación; binding.gyp puede activar node-gyp automáticamente.

No supongas que instalar node-gyp globalmente cambió la copia usada por npm. Puede existir una copia interna, una dependencia del proyecto o un shim. El registro real es la autoridad.

Prueba Python en el mismo entorno del subproceso

Desde la misma terminal, capa de contenedor, cuenta de servicio o paso de CI, obtiene la ruta absoluta de Python y muestra sys.executable y sys.version. Compárala con npm_config_python, PYTHON y NODE_GYP_FORCE_PYTHON.

Los selectores oficiales son --python, npm_config_python, PYTHON y NODE_GYP_FORCE_PYTHON. Una ruta forzada incompatible detiene la búsqueda. En Windows usa py --list-paths.

Alinea la versión de Python con node-gyp

Un ejecutable puede existir y ser rechazado por su versión. La documentación actual exige node-gyp 10 o superior para Python 3.12 o posterior. Compara con la versión del registro fallido.

Si se elige primero un Python antiguo, elimina el selector obsoleto o apunta a una ruta compatible. Actualiza solo cuando sepas qué copia cambiará y no instales Python 2 por una respuesta antigua.

Separa la detección del siguiente fallo de compilación

Tras seleccionar Python, repite una vez con registro detallado. Si el primer error pasa a make, MSBuild, compilador, cabeceras, binding.gyp o código nativo, la detección ya quedó resuelta.

En Unix hacen falta make y un compilador C/C++; en Windows, el entorno Visual C++. Electron u otros runtimes pueden exigir sus propias cabeceras. Son ramas separadas.

Aplica un único selector limitado y reversible

Usa --python al invocar node-gyp directamente y npm_config_python en el paso de npm. Emplea PYTHON solo como contrato más amplio y reserva el valor forzado para una ruta compatible verificada.

Elimina valores obsoletos del proyecto, usuario, sistema o CI antes de añadir otro. npm_config_ se convierte en configuración y cada npmrc tiene un alcance distinto. Registra el alcance cambiado.

Verifica el comando original y conserva el retroceso

Repite el comando npm original en el contexto original. Confirma la ruta de Python y la versión de node-gyp, y luego carga o prueba el módulo nativo. Configurar con éxito no basta.

Registra valores anteriores y nuevos, rutas, versiones, alcance y comando de eliminación. Borra los selectores temporales si no deben afectar a otros proyectos.

Ilustración original de detección, compatibilidad y herramientas nativas.
Ilustración original: Detente en la primera etapa fallida. Watch at Ease