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

¿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
Enter fullscreen mode Exit fullscreen mode

⚠️ Importante: No uses del en 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
Enter fullscreen mode Exit fullscreen mode

Esto regenerará Scripts\pip.exe con la ruta correcta a Scripts\python.exe.

3. Verifica que el lanzador funcione

Scripts\pip.exe --version
Enter fullscreen mode Exit fullscreen mode

✅ 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 (
    echoError: El lanzador sigue fallando. Reinstala el entorno virtual.
)
Enter fullscreen mode Exit fullscreen mode

Uso:

fix_pip_launcher.bat "C:\Users\vanessa\myproject\venv"
Enter fullscreen mode Exit fullscreen mode

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 .
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

Para entornos nuevos, recrea el venv con --clear:

# Elimina el venv actual y recrea
rm -r venv
python -m venv venv --clear
Enter fullscreen mode Exit fullscreen mode

🔍 Nota crítica: El error nunca es de permisos en entornos de usuario (como C:\Users\...). Si icacls muestra permisos normales y el lanzador falla, es siempre corrupción del stub.

Top comments (0)