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 pip.exe en entornos virtuales de Windows no es un ejecutable independiente, sino un launcher (lanzador) que contiene incrustado:

  • La ruta absoluta al python.exe del entorno virtual
  • Un script __main__.py de 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])
Enter fullscreen mode Exit fullscreen mode

Ejecuta desde CMD (no desde bash):

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

🔍 ¿Qué esperar?

Si la ruta mostrada apunta a una ubicación que ya no existe (ej. C:\Python310\python.exe tras 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
Enter fullscreen mode Exit fullscreen mode

⚠️ Importante: Usa la ruta absoluta al python.exe de tu instalación deseada (verifica con where python o Get-Command python en PowerShell).


Paso 3: Alternativa rápida (sin recrear el entorno)

Si no puedes recrear el entorno (ej. dependencias instaladas que no quieres perder):

  1. 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"
Enter fullscreen mode Exit fullscreen mode
  1. Regenera solo los launchers de pip:
   "C:\Users\<username>\<project dir>\venv\Scripts\python.exe" -m pip install --force-reinstall pip
Enter fullscreen mode Exit fullscreen mode

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

Pro-tip: Evita futuros problemas

  1. Nunca muevas un entorno virtual

    Los launchers contienen rutas absolutas. Si mueves el entorno, los enlaces se rompen.

  2. Usa python -m pip en lugar de pip

    Es más robusto: siempre usa el python.exe del entorno activo, sin depender de launchers externos.

  3. Verifica rutas antes de reinstalar Python

    Usa where python para confirmar qué instalación usa tu terminal.

  4. Evita mezclar instalaciones de Python

    Si usas múltiples versiones, gestiona entornos con py -3.10 -m venv (Python Launcher para Windows) en lugar de rutas absolutas.

Top comments (0)