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 problema ocurre porque el archivo pip.exe en venv/Scripts/ es un launcher empaquetado que contiene una ruta fija a python.exe y un script __main__.py incrustado. Cuando se crea el entorno virtual, este launcher se construye con la ruta exacta al python.exe que se usó para crearlo.

Si esa ruta original ya no existe (por ejemplo, porque desinstalaste Python 3.10.11 y ahora solo tienes 3.10.11 instalado desde Microsoft Store —con una ruta diferente—), el launcher sigue apuntando a una ubicación inválida. Al intentar ejecutarlo, Windows devuelve "Access is denied", aunque técnicamente el problema no es de permisos, sino de ruta rota en el launcher.

Este comportamiento es típico cuando:

  • Se cambia la versión de Python o su ubicación (instalación local vs Microsoft Store).
  • Se mueve o renombra el entorno virtual.
  • Hay conflictos entre instalaciones de Python de distintas fuentes (python.org vs Microsoft Store).

Pasos para solucionarlo

1. Verifica si el problema es el launcher roto

Ejecuta en CMD (¡no en bash!):

"C:\Users\<username>\<project dir>\venv\Scripts\pip.exe" -V
Enter fullscreen mode Exit fullscreen mode

Si obtienes Access is denied, el launcher está roto.

2. Recrea el entorno virtual (solución definitiva)

No intentes reparar el launcher manualmente. Es más rápido y confiable recrear el entorno.

# Desactiva el entorno si está activo
deactivate

# Elimina el entorno actual
rmdir /s /q venv

# Crea uno nuevo con la versión correcta de Python
python -m venv venv

# Activa el entorno
venv\Scripts\activate

# Verifica que pip funcione
pip --version
Enter fullscreen mode Exit fullscreen mode

Nota crítica: Usa python -m venv desde el intérprete que quieres usar en producción, no desde otro instalado por Microsoft Store si no es el que usas en CI/CD.

3. Si no puedes recrear el entorno (casos extremos)

Si por alguna razón no puedes borrar el entorno actual, reemplaza manualmente el launcher:

# Copia pip.exe desde otro entorno funcional
copy "C:\otro\entorno\Scripts\pip.exe" "C:\tu\proyecto\venv\Scripts\pip.exe"

# O mejor aún, regenera solo los launchers con:
python -m pip install --upgrade pip --force-reinstall
Enter fullscreen mode Exit fullscreen mode

⚠️ Importante: El comando anterior solo funciona si python -m pip funciona. Si no, usa el método de recrear el entorno.


Bloque de código corregido (script de diagnóstico)

Si necesitas inspeccionar la ruta rota en pip.exe (solo para diagnóstico), usa este script en CMD:

# save as check_pip_launcher.py
import sys
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)
        path = data[i0:i1].strip(b'"').decode()
        print(f"Embedded python.exe path: {path}")
except Exception as e:
    print(f"Error reading launcher: {e}")
Enter fullscreen mode Exit fullscreen mode

Ejecuta:

python check_pip_launcher.py "C:\tu\proyecto\venv\Scripts\pip.exe"
Enter fullscreen mode Exit fullscreen mode

Si la ruta mostrada no existe (ej. C:\Python310\python.exe pero ahora Python está en C:\Users\...\AppData\Local\Programs\Python\Python310\python.exe), el launcher está roto.


Pro-tip: Evita futuros problemas con launchers rotos

  • Usa siempre la misma fuente de Python (python.org o Microsoft Store, no ambas).
  • Nunca muevas el entorno virtual (venv no es portable).
  • En scripts de CI/CD, usa siempre python -m pip en lugar de pip.exe para evitar dependencia del launcher:
  # En lugar de:
  pip install -e .

  # Usa:
  python -m pip install -e .
Enter fullscreen mode Exit fullscreen mode
  • Verifica la integridad del entorno antes de usarlo:
  python -c "import sys; print(sys.executable)"
  # Debe mostrar: C:\...\venv\Scripts\python.exe
Enter fullscreen mode Exit fullscreen mode

🔑 Conclusión: El error no es de permisos reales, sino de un launcher corrupto por cambio de ruta de python.exe. La única solución robusta es recrear el entorno con la versión correcta de Python.

Top comments (0)