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 el archivo pip.exe en el directorio Scripts/ de tu entorno virtual es un launcher empaquetado (un ZIP autoextraíble) que contiene una ruta fija a python.exe. Cuando se crea el entorno virtual, este launcher se "quema" con la ruta exacta del python.exe usado para crearlo.

Si has reinstalado Python múltiples veces (desde python.org, Microsoft Store, múltiples versiones), es muy probable que:

  • El python.exe original ya no exista en la ruta grabada dentro de pip.exe
  • El sistema intente ejecutar una ruta rota → falla con "Access is denied" (error genérico de Windows cuando no puede cargar el binario o su dependencia)
  • python -m pip funcione porque usa el python.exe actual del entorno activado, no el launcher empaquetado

Este no es un problema de permisos de archivo (como verificaste con icacls), sino de rutas rotas embebidas en el launcher.


Pasos para solucionarlo definitivamente

1. Elimina el entorno virtual corrupto

# Desde PowerShell o CMD (NO bash)
rd /s /q "C:\Users\<username>\<project dir>\venv"
Enter fullscreen mode Exit fullscreen mode

2. Crea un nuevo entorno virtual desde el Python correcto

# Verifica la versión exacta que necesitas:
"C:\Path\To\Python310\python.exe" --version

# Crea el entorno con ese binario explícitamente:
"C:\Path\To\Python310\python.exe" -m venv venv
Enter fullscreen mode Exit fullscreen mode

⚠️ Importante: Usa siempre la ruta absoluta al python.exe deseado. Evita usar py -3.10 o variables de entorno que puedan cambiar.

3. Verifica que el launcher funcione

# Ejecuta directamente el launcher nuevo (sin activar venv):
"C:\Users\<username>\<project dir>\venv\Scripts\pip.exe" --version
Enter fullscreen mode Exit fullscreen mode

✅ Debería mostrar algo como: pip 23.x.x from ... (python 3.10)

4. Usa siempre python -m pip como práctica segura (recomendado)

# Activa el entorno normalmente
.\venv\Scripts\activate

# Usa siempre este formato:
python -m pip install -e .
Enter fullscreen mode Exit fullscreen mode

Bloque de código corregido (script de diagnóstico para futuras referencias)

Si necesitas inspeccionar el pip.exe en el futuro, guarda este script como check_pip_launcher.py:

import sys
import os

def check_pip_launcher(pip_exe_path):
    if not os.path.isfile(pip_exe_path):
        print(f"ERROR: {pip_exe_path} no existe")
        return

    with open(pip_exe_path, 'rb') as f:
        data = f.read()

    # Busca el ZIP central directory (PK\x05\x06)
    i = data.rfind(b'PK\x05\x06')
    if i == -1:
        print("ERROR: No se encontró el ZIP central directory")
        return

    # Busca el shebang: b'#!' antes del ZIP
    i0 = data.rfind(b'#!', 0, i) + 2
    i1 = data.find(b'\n', i0)
    if i0 == 1 or i1 == -1:
        print("ERROR: No se encontró el shebang (#!)")
        return

    python_path = data[i0:i1].strip(b'"').decode('utf-8', errors='replace')
    print(f"Ruta embebida en pip.exe: {python_path}")

    if not os.path.isfile(python_path):
        print(f"⚠️  CRÍTICO: El python.exe apuntado NO EXISTE")
        print(f"   Solución: Re-crea el entorno virtual con el python correcto")
    else:
        print(f"✅ Python embebido existe y es accesible")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Uso: python check_pip_launcher.py \"path\\to\\pip.exe\"")
        sys.exit(1)

    check_pip_launcher(sys.argv[1])
Enter fullscreen mode Exit fullscreen mode

Ejecútalo desde CMD/PowerShell:

python check_pip_launcher.py "C:\Users\<username>\<project>\venv\Scripts\pip.exe"
Enter fullscreen mode Exit fullscreen mode

Pro-tip: Evita este problema en el futuro

Práctica Por qué ayuda
Nunca muevas/renombres el entorno virtual Rutas absolutas se rompen
Usa python -m pip en lugar de pip Evita el launcher empaquetado
Crea entornales con python -m venv usando el binario explícito Garantiza consistencia
Evita mezclar instaladores de python.org y Microsoft Store Cada uno usa rutas y metadatos distintos
Considera usar py -3.10 -m venv venv Usa el launcher py.exe que maneja versiones dinámicamente

🔥 Solución definitiva: Si el problema persiste tras recrear el entorno, ejecuta sfc /scannow en CMD como administrador. A veces, archivos del sistema de Windows (como python.exe o dependencias DLL) se corrompen y afectan la ejecución de launchers empaquetados.

Top comments (0)