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 Windows no es un ejecutable independiente, sino un launcher (lanzador) que contiene incrustado:
- La ruta absoluta al
python.exedel entorno virtual - Un script
__main__.pyde pip (empaquetado como ZIP)
Cuando se produce el error "Access is denied" al ejecutar directamente pip.exe, pero python -m pip funciona correctamente, la causa más probable es que la ruta incrustada en pip.exe apunta a un python.exe que ya no existe o cuyos permisos han sido alterados (por ejemplo, tras reinstalar Python, mover el entorno, o cambios en políticas de seguridad del sistema).
Esto es especialmente común tras:
- Mover o eliminar la instalación original de Python
- Usar múltiples instalaciones de Python (desde web, Microsoft Store, etc.)
- Restaurar el entorno desde copia de seguridad sin regenerar los launchers
- Cambios en permisos de archivos/directorios por herramientas de antivirus o políticas corporativas
Pasos para solucionar el problema
Paso 1: Verifica la ruta incrustada en pip.exe
Crea un script check_pip_launcher.py con el siguiente contenido:
import sys
def extract_python_path(pip_exe_path):
try:
with open(pip_exe_path, 'rb') as f:
data = f.read()[-4096:]
i = data.rfind(b'PK\x05\x06')
i0 = data.rfind(b'#!', 0, i) + 2
i1 = data.find(b'\n', i0)
p = data[i0:i1].strip(b'"').decode()
print(f"Ruta incrustada en pip.exe: {p}")
return p
except Exception as e:
print(f"Error al leer pip.exe: {e}")
return None
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Uso: python check_pip_launcher.py \"ruta\\a\\pip.exe\"")
sys.exit(1)
extract_python_path(sys.argv[1])
Ejecuta desde CMD (no desde bash):
python check_pip_launcher.py "C:\Users\<username>\<project dir>\venv\Scripts\pip.exe"
🔍 ¿Qué esperar?
Si la ruta mostrada apunta a una ubicación que ya no existe (ej.C:\Python310\python.exetras desinstalar Python 3.10), esa es la causa raíz.
Paso 2: Regenera los launchers del entorno virtual
No copies manualmente pip.exe. En su lugar, recrea el entorno virtual con la versión correcta de Python:
# Desactiva el entorno actual si está activo
deactivate
# Elimina el entorno existente (¡copia tus requirements.txt primero!)
rmdir /s /q "C:\Users\<username>\<project dir>\venv"
# Recrea el entorno con Python 3.10 (ajusta la ruta según tu instalación)
"C:\Path\To\Python310\python.exe" -m venv "C:\Users\<username>\<project dir>\venv"
# Activa el nuevo entorno
"C:\Users\<username>\<project dir>\venv\Scripts\activate"
# Verifica que pip.exe funciona
pip --version
⚠️ Importante: Usa la ruta absoluta al
python.exede tu instalación deseada (verifica conwhere pythonoGet-Command pythonen PowerShell).
Paso 3: Alternativa rápida (sin recrear el entorno)
Si no puedes recrear el entorno (ej. dependencias instaladas que no quieres perder):
- Elimina solo los launchers corruptos:
del "C:\Users\<username>\<project dir>\venv\Scripts\pip.exe"
del "C:\Users\<username>\<project dir>\venv\Scripts\pip3.exe"
del "C:\Users\<username>\<project dir>\venv\Scripts\pip3.10.exe"
- Regenera solo los launchers de pip:
"C:\Users\<username>\<project dir>\venv\Scripts\python.exe" -m pip install --force-reinstall pip
✅ Esto reinstalará pip y regenerará los launchers con la ruta correcta a
python.exe.
Bloque de código corregido (comando final)
:: Desactiva entorno (si está activo)
deactivate
:: Elimina launchers corruptos
del "C:\Users\<username>\<project dir>\venv\Scripts\pip.exe"
del "C:\Users\<username>\<project dir>\venv\Scripts\pip3.exe"
:: Regenera launchers con la versión correcta de Python
"C:\Users\<username>\<project dir>\venv\Scripts\python.exe" -m pip install --force-reinstall pip
:: Verifica
"C:\Users\<username>\<project dir>\venv\Scripts\pip.exe" --version
Pro-tip: Evita futuros problemas
Nunca muevas un entorno virtual
Los launchers contienen rutas absolutas. Si mueves el entorno, los enlaces se rompen.Usa
python -m pipen lugar depip
Es más robusto: siempre usa elpython.exedel entorno activo, sin depender de launchers externos.Verifica rutas antes de reinstalar Python
Usawhere pythonpara confirmar qué instalación usa tu terminal.Evita mezclar instalaciones de Python
Si usas múltiples versiones, gestiona entornos conpy -3.10 -m venv(Python Launcher para Windows) en lugar de rutas absolutas.
Top comments (0)