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
⚠️ No borres
python.exeniActivate.ps1/activate.bat, solo lospip*.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"
🔁
--upgradefuerza la regeneración de todos los launchers (pip.exe,easy_install.exe, etc.) usando elpython.exeactual, 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
Deberías ver algo como:
pip 23.2.1 from C:\Users\<username>\<project dir>\venv\Lib\site-packages\pip (python 3.10)
✅ 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 .
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
🔍 Nota crítica: Si usas múltiples versiones de Python, asegúrate de invocar el
python.execorrecto en el paso 2. Usawhere pythonpara 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 venven lugar depython -m venv venvpara evitar ambigüedad en múltiples instalaciones. -
En scripts de CI/CD o producción, siempre usa
python -m pippara 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)