Cómo solucionar el error de permisos con pip.exe en entornos virtuales de Python en Windows
¿Por qué ocurre este error?
El problema no es un fallo de permisos de archivo real (como confirmó icacls), sino una corrupción o inconsistencia en el launcher pip.exe dentro del entorno virtual. En Windows, pip.exe no es un ejecutable independiente: es un launcher empaquetado que contiene una ruta fija a python.exe y el script __main__.py de pip embebido como ZIP.
Cuando se crea un entorno virtual, este launcher se genera apuntando a la versión exacta de python.exe usada en la creación del entorno. Si posteriormente se modifica el entorno (por ejemplo, al reinstalar Python, cambiar versiones, o mover el entorno), el launcher puede quedar apuntando a una ruta inválida o corrompida. Esto provoca que al ejecutar pip.exe, el sistema intente lanzar una ruta no válida → "Access is denied", aunque los permisos del archivo sean correctos.
El hecho de que python -m pip funcione confirma que el problema está solo en el launcher, no en pip en sí.
Pasos para solucionarlo definitivamente
✅ Paso 1: Elimina el launcher corrupto
Borra pip.exe (y pip3.exe, pipX.exe si existen) del directorio Scripts/ del entorno virtual.
# Desde PowerShell o CMD (NO bash)
Remove-Item "C:\Users\<username>\<project dir>\venv\Scripts\pip*.exe"
⚠️ No borres
python.exenipythonw.exe. Solo lospip*.exe.
✅ Paso 2: Regenera los launchers correctamente
Ejecuta el siguiente comando desde el entorno virtual activado, usando python -m pip install --force-reinstall pip:
# Asegúrate de estar dentro del entorno virtual (venv activado)
python -m pip install --force-reinstall --no-cache-dir pip
Esto reinstala pip desde cero, regenerando correctamente los launchers pip.exe, pip3.exe, etc., con la ruta correcta a python.exe del entorno.
🔍 ¿Por qué funciona?
Al forzar la reinstalación, pip regenera sus launchers usando la ruta actual desys.executable, evitando referencias rotas.
✅ Paso 3: Verifica la solución
Ejecuta directamente el launcher:
"C:\Users\<username>\<project dir>\venv\Scripts\pip.exe" --version
Debería mostrar algo como:
pip 23.2.1 from C:\Users\<username>\<project dir>\venv\Lib\site-packages\pip (python 3.10)
Si ves el error de nuevo, repite el paso 2.
Bloque de código corregido (comando definitivo)
# 1. Eliminar launchers corruptos
Remove-Item -Path "venv\Scripts\pip*.exe" -Force
# 2. Regenerar launchers desde el entorno activado
python -m pip install --force-reinstall --no-cache-dir pip
# 3. Verificar
venv\Scripts\pip.exe --version
💡 Nota crítica: Ejecuta estos comandos desde CMD o PowerShell, no desde WSL/bash. Los launchers de Windows se generan con rutas absolutas en formato Windows (
C:\...), y bash puede corromperlas.
Pro-tip: Evita este problema en el futuro
-
Nunca muevas o copies directorios de entornos virtuales. Si necesitas reutilizar un entorno, recrea el entorno desde cero (
python -m venv venv) y reinstala dependencias. -
Evita mezclar instaladores de Python (web vs Microsoft Store): usan rutas y metadatos distintos. Si usas Microsoft Store, crea entornos con
py -3.10 -m venv venv(no conpython -m venv). -
Usa siempre
python -m pipen scripts automatizados: evita depender del launcher y garantiza portabilidad entre sistemas.
🛠️ Si el problema persiste:
Ejecutapython -c "import sys; print(sys.executable)"dentro del entorno activado. Si la ruta no coincide convenv\Scripts\python.exe, tu entorno está roto. Recréalo:deactivate && rmdir /s /q venv && python -m venv venv && venv\Scripts\activate && pip install -e .
Top comments (0)