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

python dev.to

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

¿Por qué ocurre este error?

El problema no es un error de permisos tradicional (como falta de ACL o propiedad incorrecta), sino una corrupción o inconsistencia en el launcher pip.exe dentro del entorno virtual. Este archivo es un stub empaquetado que contiene una ruta fija a python.exe y un script __main__.py embebido. Cuando se crea el entorno virtual, pip.exe se genera apuntando a la versión específica de Python usada en ese momento.

Si:

  • Se instalan/desinstalan múltiples versiones de Python (especialmente desde distintas fuentes: python.org, Microsoft Store),
  • Se mueve o copia el entorno virtual,
  • Hay conflictos de rutas en el PATH o se usa una versión de Python distinta a la del momento de creación del entorno,

...entonces pip.exe puede quedar referenciando a un python.exe que ya no existe o que ya no es accesible (por ejemplo, eliminado, movido o bloqueado por permisos de archivo abierto).

El error "Access is denied." al ejecutar directamente pip.exe desde CMD (aunque python -m pip funcione) es la firma clásica de este problema.


Solución definitiva

✅ Paso 1: Verifica si el problema es el launcher

Ejecuta en CMD (no en bash):

"C:\Users\<tu-usuario>\<tu-proyecto>\venv\Scripts\pip.exe" -V
Enter fullscreen mode Exit fullscreen mode

Si obtienes "Access is denied.", el launcher está corrupto o desactualizado.

✅ Paso 2: Regenera pip.exe correctamente

No copies ni muevas el entorno virtual. En su lugar, recrea los launchers con la versión correcta de Python:

  1. Desactiva cualquier entorno virtual activo.
  2. Abre CMD como administrador (solo para asegurar permisos, no es obligatorio si tu usuario tiene control total).
  3. Ejecuta:
   python -m venv --upgrade "C:\Users\<tu-usuario>\<tu-proyecto>\venv"
Enter fullscreen mode Exit fullscreen mode

Esto regenera todos los launchers (pip.exe, pythonw.exe, etc.) usando la versión de Python que esté en tu PATH actual.

⚠️ Importante: Asegúrate de que el python que ejecuta este comando sea exactamente el mismo que usaste al crear el entorno (o el que deseas usar ahora). Verifica con where python.

✅ Paso 3: Verifica que funcione

Ejecuta:

"C:\Users\<tu-usuario>\<tu-proyecto>\venv\Scripts\pip.exe" --version
Enter fullscreen mode Exit fullscreen mode

Debería mostrar algo como:

pip 23.2.1 from C:\Users\<usuario>\<proyecto>\venv\Lib\site-packages\pip (python 3.10)
Enter fullscreen mode Exit fullscreen mode

✅ Paso 4: Usa python -m pip como fallback (recomendado)

Aunque el launcher esté arreglado, evita usar pip directamente en entornos virtuales en Windows. Usa siempre:

python -m pip install -e .
Enter fullscreen mode Exit fullscreen mode

Esto garantiza que se use el pip asociado al python del entorno, sin depender del launcher.


Bloque de código corregido (para automatizar)

Si necesitas una solución rápida y repetible (por ejemplo, en scripts CI/CD o al reiniciar un entorno):

:: Elimina los launchers corruptos y regenera
rmdir /S /Q "C:\Users\<usuario>\<proyecto>\venv"
python -m venv "C:\Users\<usuario>\<proyecto>\venv"
call "C:\Users\<usuario>\<proyecto>\venv\Scripts\activate.bat"
python -m pip install --upgrade pip setuptools wheel
python -m pip install -e .
Enter fullscreen mode Exit fullscreen mode

💡 Nota: rmdir /S /Q es más seguro que borrar solo Scripts\pip.exe, porque evita inconsistencias en otros launchers (easy_install, pydoc, etc.).


Pro-tip: Evita este problema a largo plazo

  1. Nunca mezcles fuentes de Python (python.org + Microsoft Store). Usa una sola instalación oficial.
  2. Evita mover o copiar entornos virtuales. Si necesitas portabilidad, usa pip freeze > requirements.txt y recrea el entorno en el destino.
  3. Usa py -3.10 -m venv venv para asegurar que se use la versión exacta de Python deseada (ej. py -3.10 es el launcher de Python 3.10).
  4. En entornos corporativos, verifica si políticas de seguridad (como AppLocker o Windows Defender Application Control) bloquean ejecución de archivos empaquetados (como pip.exe).

Conclusión: El problema no es de permisos del archivo, sino de inconsistencia interna del launcher. La solución es regenerarlo con python -m venv --upgrade, y usar python -m pip como práctica estándar.

Source: dev.to

arrow_back Back to Tutorials