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 error ocurre porque pip.exe en el entorno virtual es un launcher empaquetado (un archivo .exe que contiene una copia embebida de python.exe y el script __main__.py de pip). Este launcher almacena una ruta fija a python.exe en su interior. Cuando se crea el entorno virtual, el launcher se configura con la ruta exacta del python.exe usado para crearlo.

Causa raíz: Si has reinstalado Python (especialmente si pasaste de instalador oficial a Microsoft Store, o viceversa), o si el python.exe original ya no existe en la ruta original (por ejemplo, si desinstalaste Python 3.10.11), el launcher de pip.exe sigue apuntando a una ruta rota o inaccesible. Esto provoca el error “Access is denied” al intentar ejecutarlo directamente, aunque python -m pip funcione (porque usa el python.exe actual del PATH, no el embebido).


Pasos para solucionarlo

1. Verifica la ruta embebida en pip.exe

Crea un script temporal (check_pip_launcher.py) con el siguiente contenido:

import sys
if len(sys.argv) < 2:
    print("Uso: python check_pip_launcher.py \"path\\to\\pip.exe\"")
    sys.exit(1)

try:
    with open(sys.argv[1], '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 embebida en pip.exe: {p}")
except Exception as e:
    print(f"Error al leer pip.exe: {e}")
Enter fullscreen mode Exit fullscreen mode

Ejecútalo desde CMD (no desde Bash) y sin activar el entorno virtual:

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

⚠️ Si obtienes “Access is denied” aquí también, el problema es más profundo (falta de permisos o archivo corrupto). Ve al paso 3.

2. Si la ruta embebida es inválida (archivo inexistente o con permisos incorrectos)

Solución definitiva: Recrea el entorno virtual con el python.exe correcto.

Opción A (recomendada): Elimina y recrea el entorno

# Desde CMD (no Bash), en la raíz del proyecto
rmdir /s /q venv
python -m venv venv
venv\Scripts\activate
pip install -e .
Enter fullscreen mode Exit fullscreen mode

✅ Esto garantiza que pip.exe se genere con la ruta correcta al python.exe actual.

Opción B (si no puedes borrar el entorno): Reemplaza pip.exe manualmente

  1. Copia python.exe desde tu entorno virtual a una ubicación temporal (ej: venv\Scripts\python_backup.exe)
  2. Descarga el último pip como archivo .whl:
   python -m pip install --upgrade pip --target venv\Lib\site-packages
Enter fullscreen mode Exit fullscreen mode
  1. Usa pip.exe de otro entorno funcional como plantilla (opcional), o simplemente ejecuta:
   python -m pip install --force-reinstall pip
Enter fullscreen mode Exit fullscreen mode

Esto regenera los launchers (pip.exe, pip3.exe, etc.) con la ruta correcta.


Bloque de código corregido (comando final)

:: Elimina el entorno roto y recrea con el python correcto
rmdir /s /q venv
python -m venv venv
call venv\Scripts\activate.bat
pip install --upgrade pip
pip install -e .
Enter fullscreen mode Exit fullscreen mode

🔁 Nota: Usa call para asegurar que el activate.bat se ejecute en el mismo contexto de CMD y no termine la sesión.


Pro-tip: Evita este problema en el futuro

  • Nunca mezcles instaladores de Python y Microsoft Store: Si usas el Microsoft Store, usa py -3.10 -m venv venv para crear entornos con la versión específica.
  • Usa python -m pip siempre que sea posible: Es más robusto que pip, ya que no depende del launcher y usa el python.exe del entorno activo.
  • Verifica la integridad del launcher: Si el error reaparece tras reinstalar Python, ejecuta:
  python -c "import sys; print(sys.executable)"
Enter fullscreen mode Exit fullscreen mode

y asegúrate de que coincida con la ruta embebida en pip.exe (verifica con el script del paso 1).

💡 Heurística rápida: Si python -m pip funciona pero pip no, el problema es siempre el launcher (pip.exe), no pip en sí.

Top comments (0)