DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar el error de permiso al ejecutar `pip.exe` en un entorno virtual de Python en Windows

Cómo solucionar el error de permiso al ejecutar pip.exe en un entorno virtual de Python en Windows

Explicación técnica

El problema ocurre porque pip.exe en entornos virtuales de Python en Windows es un launcher empaquetado (un archivo .exe que contiene una referencia interna a python.exe y el código de pip). Cuando se crea el entorno virtual, este launcher almacena la ruta absoluta al python.exe que usó durante la creación.

Si esa ruta ya no es válida (por ejemplo, porque se desinstaló Python, se movió el entorno, o hubo cambios en el sistema de archivos), el launcher falla con un error de "Access is denied" o "Permission denied", aunque los permisos del archivo sean correctos. Esto es especialmente común tras múltiples instalaciones/desinstalaciones de Python (como en tu caso, con versiones tanto del instalador oficial como de Microsoft Store).

El hecho de que python -m pip funcione confirma que el problema está específicamente en el launcher pip.exe, no en los permisos del sistema ni en la configuración del usuario.


Pasos para solucionarlo

✅ Paso 1: Elimina el launcher roto

Elimina los archivos pip.exe, pip3.exe, pipX.exe y pipX.Y.exe del directorio Scripts\ de tu entorno virtual:

# Desde PowerShell o CMD (¡no desde bash ni con el entorno activado!)
cd C:\Users\<username>\<project dir>\venv\Scripts
Remove-Item pip*.exe -Force
Enter fullscreen mode Exit fullscreen mode

⚠️ No borres python.exe ni Activate.ps1/activate.bat, solo los pip*.exe.


✅ Paso 2: Regenera los launchers correctamente

Ejecuta el siguiente comando desde fuera del entorno virtual, usando el python.exe global que deseas usar como base:

# Reemplaza la ruta con tu Python 3.10 instalado (verifica con `where python`)
"C:\Path\To\Python310\python.exe" -m venv --upgrade "C:\Users\<username>\<project dir>\venv"
Enter fullscreen mode Exit fullscreen mode

🔁 --upgrade fuerza la regeneración de todos los launchers (pip.exe, easy_install.exe, etc.) usando el python.exe actual, sin recrear el entorno desde cero.

📌 Si prefieres recrear todo el entorno desde cero (recomendado si hay dudas):

Remove-Item -Recurse -Force "C:\Users\<username>\<project dir>\venv"
python -m venv "C:\Users\<username>\<project dir>\venv"

✅ Paso 3: Verifica que pip.exe funcione

Ejecuta directamente desde CMD (no desde bash ni con el entorno activado):

"C:\Users\<username>\<project dir>\venv\Scripts\pip.exe" --version
Enter fullscreen mode Exit fullscreen mode

Deberías ver algo como:

pip 23.2.1 from C:\Users\<username>\<project dir>\venv\Lib\site-packages\pip (python 3.10)
Enter fullscreen mode Exit fullscreen mode

✅ Paso 4: Usa python -m pip como fallback (opcional pero recomendado)

Aunque ya tienes pip.exe funcionando, en entornos de producción es más robusto usar siempre:

python -m pip install -e .
Enter fullscreen mode Exit fullscreen mode

Esto evita cualquier problema con launchers corruptos y garantiza que se use el pip asociado al python que ejecutas.


Bloque de código corregido (comando definitivo)

# 1. Elimina launchers rotos
cd "C:\Users\<username>\<project dir>\venv\Scripts"
Remove-Item pip*.exe -Force

# 2. Regenera launchers usando tu Python 3.10 específico
& "C:\Path\To\Python310\python.exe" -m venv --upgrade "C:\Users\<username>\<project dir>\venv"

# 3. Verifica
& "C:\Users\<username>\<project dir>\venv\Scripts\pip.exe" --version
Enter fullscreen mode Exit fullscreen mode

🔍 Nota crítica: Si usas múltiples versiones de Python, asegúrate de invocar el python.exe correcto en el paso 2. Usa where python para confirmar la ruta.


Pro-tip: Evita este problema en el futuro

  • Nunca muevas ni renombres directorios de entornos virtuales (rompe las rutas absolutas embebidas).
  • Desinstala versiones de Python antiguas (especialmente las de Microsoft Store, que usan rutas como C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\python.exe, que son symlinks volátiles).
  • Usa py -3.10 -m venv venv en lugar de python -m venv venv para evitar ambigüedad en múltiples instalaciones.
  • En scripts de CI/CD o producción, siempre usa python -m pip para evitar dependencia de launchers.

💡 Bonus: Si usas PowerShell, puedes crear un alias seguro:

Set-Alias -Name pip -Value python -ArgumentList "-m pip"

El error desaparecerá. No es un problema de permisos del sistema: es un problema de rutas rotas dentro del launcher.

Top comments (0)