Cómo solucionar el error de permisos al ejecutar pip.exe en un entorno virtual de Python en Windows
Explicación técnica
El error ocurre porque el launcher pip.exe (un pequeño ejecutable empaquetado con Python en Windows) contiene una ruta incrustada al python.exe del entorno virtual. Cuando se crea el entorno virtual, este launcher se construye con la ruta exacta al python.exe existente en el momento de la creación.
Si después de crear el entorno virtual:
- Se mueve el entorno virtual,
- Se reinstala Python en otra ubicación,
- Se cambia el usuario o se restaura desde backup,
- O hay corrupción en el archivo
pip.exe(por ejemplo, por antivirus o copias incompletas),
…el launcher sigue intentando ejecutar una ruta que ya no es válida o accesible, causando el error “Access is denied” o “Permission denied” al intentar ejecutarlo directamente.
⚠️ Nota crítica: El hecho de que python -m pip funcione no significa que estés usando el pip del entorno virtual. De hecho, sí lo estás usando —porque python en el entorno virtual está correctamente enlazado—, pero el launcher pip.exe está roto.
Pasos para solucionarlo
1. Verifica si el launcher está corrupto o apunta a una ruta inválida
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()
# Buscar el ZIP central directory (PK\x05\x06)
i = data.rfind(b'PK\x05\x06')
if i == -1:
print("ERROR: No ZIP central directory found in pip.exe")
return None
# Buscar el shebang "#!" dentro de los últimos 4KB
i0 = data.rfind(b'#!', 0, i) + 2
i1 = data.find(b'\n', i0)
if i0 == 1 or i1 == -1:
print("ERROR: No shebang found in pip.exe")
return None
p = data[i0:i1].strip(b'"').decode('utf-8', errors='replace')
return p
except Exception as e:
print(f"ERROR reading pip.exe: {e}")
return None
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Uso: python check_pip_launcher.py <path_to_pip.exe>")
sys.exit(1)
path = sys.argv[1]
embedded_python = extract_python_path(path)
print(f"Ruta embebida en pip.exe: {embedded_python}")
print(f"¿Existe el archivo?: {embedded_python and os.path.isfile(embedded_python)}")
Nota: Añade
import osal inicio si no está presente.
Ejecuta desde CMD (no PowerShell ni WSL):
python check_pip_launcher.py "C:\Users\<username>\<project>\venv\Scripts\pip.exe"
Si la ruta mostrada no existe o apunta a una versión desinstalada de Python (por ejemplo, C:\Users\...\AppData\Local\Programs\Python\Python310\python.exe cuando ya no está instalado), el launcher está roto.
2. Elimina y regenera el launcher pip.exe
Opción A (recomendada): Regenera el entorno virtual
- Desactiva el entorno virtual (
deactivate). - Elimina la carpeta
venvcompleta:
rmdir /s /q "C:\Users\<username>\<project>\venv"
- Crea un nuevo entorno desde cero:
python -m venv venv
- Activa el entorno:
venv\Scripts\activate
- Verifica que
pip.exefuncione:
pip --version
Opción B (rápida): Reinstala pip dentro del entorno actual
Si no puedes recrear el entorno (por ejemplo, dependencias instaladas que no quieres perder):
# Asegúrate de que el entorno esté activado
python -m ensurepip --upgrade
python -m pip install --upgrade pip
Esto regenera los launchers (pip.exe, pip3.exe, etc.) con la ruta correcta al python.exe actual del entorno.
✅ Confirmación: Tras esto, ejecuta
pip --versionywhere pip. Debería mostrar la ruta dentro delvenv\Scripts\y no fallar.
Bloque de código corregido (comando de reparación rápida)
:: Desde CMD (NO PowerShell ni WSL), con el entorno activado:
python -m ensurepip --upgrade && python -m pip install --upgrade pip
⚠️ Importante: Usa
&¶ asegurar queensurepipse ejecute primero. Si falla, el entorno está severamente dañado y debes recrearlo.
Pro-tip: Evita este problema en el futuro
-
Nunca muevas o copies manualmente la carpeta
venv. Si necesitas migrar un entorno, usa:
pip freeze > requirements.txt && rm -rf venv && python -m venv venv && pip install -r requirements.txt
-
Usa
python -m pipen lugar depipen scripts y CI/CD. Es más robusto y evita problemas con launchers corruptos:
python -m pip install -e .
Evita múltiples instalaciones de Python en rutas cambiantes. Usa
py -3.10opy -3.11(Python Launcher for Windows) para evitar ambigüedades.Si usas antivirus, excluye la carpeta del entorno virtual (
venv/) y el directorio de proyectos.No uses Microsoft Store para Python en entornos de desarrollo serios. Las versiones de la Store tienen comportamientos no deterministas con rutas y permisos en Windows.
✅ Resultado esperado: Tras ejecutar python -m ensurepip --upgrade, el comando pip --version funcionará sin errores de permisos, y podrás ejecutar pip install -e . sin problemas.
Top comments (0)