Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿pip dice instalado pero aparece ModuleNotFoundError? Prueba el intérprete y la ruta

Identifica el Python del proceso que falla, verifica su distribución, el nombre real de import y sys.path, y cierra solo con una importación limpia.

es interpreter, distribution, import name and sys.path evidence diagram
Ilustración original: prove one runtime-bound evidence chain. Watch at Ease

Una instalación correcta y un import fallido pueden ser ciertos si describen intérpretes, nombres o rutas diferentes.

Empieza dentro del proceso que falla, vincula cada comando a su Python absoluto y prueba metadata, nombres, resolución y origen del módulo.

Conserva el runtime que falla

Repite el comando exacto y guarda directorio y traceback. Con la misma ruta de lanzamiento imprime sys.executable, versión, prefix, base_prefix y sys.path. Terminal, IDE, notebook, servicio y shebang pueden elegir intérpretes distintos.

No empieces con sudo pip, --user, PYTHONPATH global ni copiando site-packages. La primera evidencia es el ejecutable absoluto informado por el proceso que falló.

Pregunta a ese intérprete por la distribución

Ejecuta /absolute/python -m pip show <distribution> y guarda Name, Version, Location y, si hace falta, --files. El éxito de otro pip no demuestra visibilidad aquí.

Si esa distribución falta, instala en el entorno previsto tras revisar el lock. Si Location no está en sys.path, investiga activación, user site, pyvenv.cfg, servicio o contenedor.

Separa distribución e import

pip usa un nombre de distribución e import usa un paquete importable. No hay relación obligatoria uno a uno; Pillow se importa como PIL.

Confirma documentación y archivos instalados; consulta packages_distributions() cuando ayude. No declares fallo de instalación por probar el nombre equivocado.

Explica la ruta en vez de parchearla

Python construye sys.path con script o directorio actual, variables, señales del ejecutable, configuración venv y site. Registra USER_SITE y ENABLE_USER_SITE con python -m site.

Un servicio puede desactivar user site, un IDE conservar un kernel viejo y un shebang apuntar a otro ejecutable. Repara el límite mínimo y evita parches globales.

Descarta shadowing y exige prueba final

Busca archivos o carpetas locales con el mismo nombre. Usa find_spec antes de importar y module.__file__ después para descartar shadowing.

Cierra solo cuando el mismo ejecutable ve Location, resuelve el import desde la ruta prevista, importa en proceso limpio y ejecuta el script o test original. Guarda toda la prueba.

es Python import repair and clean exit-proof diagram
Ilustración original: repair the smallest boundary and prove a clean import. Watch at Ease