Cómo solucionar el error de permiso al ejecutar pip.exe en un entorno virtual de Python en Windows
¿Por qué ocurre este error?
El problema no está en los permisos del archivo pip.exe (como confirmó icacls), sino en que el lanzador pip.exe está corrupto o desactualizado. Este archivo es un stub empaquetado con una ruta fija a python.exe y un script interno (__main__.py). Cuando se crea el entorno virtual, pip.exe se genera con la ruta a la versión de Python usada en ese momento. Si esa versión de Python fue desinstalada o movida (como sucedió tras instalar/desinstalar múltiples versiones), el lanzador sigue apuntando a una ruta inválida → "Access is denied" al intentar ejecutarlo.
Esto es especialmente común tras:
- Cambiar versiones de Python (instalar/desinstalar múltiples veces).
- Usar instaladores de Python que no limpian correctamente rutas antiguas.
- Mover o renombrar directorios del sistema o del usuario.
Solución definitiva (pasos verificados)
1. Elimina el lanzador corrupto de pip.exe
# Desde la raíz del entorno virtual (venv)
rm Scripts\pip.exe
⚠️ Importante: No uses
delen PowerShell si el archivo está bloqueado. Cierra todas las terminales y editores antes.
2. Regenera pip.exe usando el lanzador correcto
Ejecuta desde la raíz del entorno virtual:
# Asegura que estés en el directorio del venv
cd C:\Users\<username>\<project dir>\venv
# Ejecuta el script de instalación de pip desde python.exe (no desde pip.exe)
Scripts\python.exe -m pip install --upgrade pip --force-reinstall
Esto regenerará Scripts\pip.exe con la ruta correcta a Scripts\python.exe.
3. Verifica que el lanzador funcione
Scripts\pip.exe --version
✅ Salida esperada:
pip 23.x.x from C:\...\venv\lib\site-packages\pip (python 3.10)
Bloque de código corregido (script de verificación automática)
Guarda como fix_pip_launcher.bat y ejecuta como administrador si es necesario (aunque normalmente no lo es):
@echo off
setlocal enabledelayedexpansion
set "VENV_DIR=%~1"
if "%VENV_DIR%"=="" set "VENV_DIR=%cd%\venv"
if not exist "%VENV_DIR%\Scripts\python.exe" (
echo ERROR: No se encontró python.exe en %VENV_DIR%\Scripts\
exit /b 1
)
echo [1/3] Eliminando pip.exe corrupto...
del /f /q "%VENV_DIR%\Scripts\pip.exe" 2>nul
echo [2/3] Regenerando pip.exe con la ruta correcta...
"%VENV_DIR%\Scripts\python.exe" -m pip install --upgrade pip --force-reinstall --no-warn-script-location >nul
echo [3/3] Verificando lanzador...
"%VENV_DIR%\Scripts\pip.exe" --version
if %errorlevel% equ 0 (
echo ✅ ¡Lanzador pip.exe reparado correctamente!
) else (
echo ❌ Error: El lanzador sigue fallando. Reinstala el entorno virtual.
)
Uso:
fix_pip_launcher.bat "C:\Users\vanessa\myproject\venv"
Pro-tip: Evita el problema en el futuro
Usa siempre python -m pip en entornos virtuales
# En lugar de:
pip install -e .
# Usa:
python -m pip install -e .
Esto evita usar el lanzador pip.exe y ejecuta directamente el módulo pip desde el python.exe del entorno, ignorando cualquier corrupción del stub.
Si usas PowerShell, añade esta función a tu perfil ($PROFILE):
function pip {
python -m pip @Args
}
Para entornos nuevos, recrea el venv con --clear:
# Elimina el venv actual y recrea
rm -r venv
python -m venv venv --clear
🔍 Nota crítica: El error nunca es de permisos en entornos de usuario (como
C:\Users\...). Siicaclsmuestra permisos normales y el lanzador falla, es siempre corrupción del stub.
Top comments (0)