DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar el error de permisos al ejecutar `pip.exe` en un entorno virtual de Python en Windows

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)}")
Enter fullscreen mode Exit fullscreen mode

Nota: Añade import os al 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"
Enter fullscreen mode Exit fullscreen mode

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

  1. Desactiva el entorno virtual (deactivate).
  2. Elimina la carpeta venv completa:
   rmdir /s /q "C:\Users\<username>\<project>\venv"
Enter fullscreen mode Exit fullscreen mode
  1. Crea un nuevo entorno desde cero:
   python -m venv venv
Enter fullscreen mode Exit fullscreen mode
  1. Activa el entorno:
   venv\Scripts\activate
Enter fullscreen mode Exit fullscreen mode
  1. Verifica que pip.exe funcione:
   pip --version
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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 --version y where pip. Debería mostrar la ruta dentro del venv\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
Enter fullscreen mode Exit fullscreen mode

⚠️ Importante: Usa && para asegurar que ensurepip se ejecute primero. Si falla, el entorno está severamente dañado y debes recrearlo.


Pro-tip: Evita este problema en el futuro

  1. 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
Enter fullscreen mode Exit fullscreen mode
  1. Usa python -m pip en lugar de pip en scripts y CI/CD. Es más robusto y evita problemas con launchers corruptos:
   python -m pip install -e .
Enter fullscreen mode Exit fullscreen mode
  1. Evita múltiples instalaciones de Python en rutas cambiantes. Usa py -3.10 o py -3.11 (Python Launcher for Windows) para evitar ambigüedades.

  2. Si usas antivirus, excluye la carpeta del entorno virtual (venv/) y el directorio de proyectos.

  3. 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)