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
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
✅ Nota crítica: Usa
python -m venvdesde 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
⚠️ Importante: El comando anterior solo funciona si
python -m pipfunciona. 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}")
Ejecuta:
python check_pip_launcher.py "C:\tu\proyecto\venv\Scripts\pip.exe"
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 (
venvno es portable). -
En scripts de CI/CD, usa siempre
python -m pipen lugar depip.exepara evitar dependencia del launcher:
# En lugar de:
pip install -e .
# Usa:
python -m pip install -e .
- Verifica la integridad del entorno antes de usarlo:
python -c "import sys; print(sys.executable)"
# Debe mostrar: C:\...\venv\Scripts\python.exe
🔑 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)