Cómo solucionar "Access Denied" al usar pip install en Windows
Explicación técnica
El error [Error 5] Access is denied durante la instalación de paquetes como mitmproxy (especialmente cuando incluyen extensiones en .pyd) ocurre principalmente por problemas de permisos en el directorio temporal de Windows (%TEMP%).
Cuando ejecutas pip directamente, el proceso intenta descomprimir y compilar dependencias (como cryptography) en carpetas temporales bajo AppData\Local\Temp\easy_install-*. Si el usuario no tiene permisos completos sobre estas carpetas —o si hay procesos previos que dejaron archivos bloqueados—, Windows bloquea la escritura en .pyd (módulos binarios de Python).
El uso de python -m pip en lugar de pip directo no es solo una alternativa, es una solución fundamental: ejecuta el módulo pip directamente bajo el contexto del intérprete de Python, lo que garantiza que:
- Se usen los permisos del usuario propietario del proceso de Python (no de un ejecutable externo).
- Se eviten conflictos con versiones múltiples de pip instaladas globalmente.
- Se respeten las variables de entorno y rutas del entorno Python activo.
Pasos para solucionarlo
-
Cierra todos los procesos que puedan estar usando archivos temporales:
- Reinicia tu equipo si es posible (para liberar bloqueos de archivos).
- O al menos cierra VS Code, PyCharm, terminals abiertos, etc.
Abre PowerShell como Administrador (no basta con "Run as Administrator" en CMD, PowerShell maneja mejor los permisos en Windows moderno).
Verifica que el usuario tenga permisos completos sobre
%TEMP%:
# Verifica permisos actuales
icacls $env:TEMP
Enter fullscreen mode Exit fullscreen mode
- Ejecuta la instalación usando el intérprete de Python directamente:
python -m pip install --upgrade pip
python -m pip install --no-cache-dir mitmproxy
Enter fullscreen mode Exit fullscreen mode
El flag
--no-cache-direvita que pip intente reutilizar archivos previos en caché que podrían estar corruptos o bloqueados.
- Si persiste el error, fuerza la limpieza del directorio temporal:
# Limpia carpetas temporales de instalaciones previas
Remove-Item -Recurse -Force "$env:TEMP\easy_install-*" -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force "$env:TEMP\pip-*" -ErrorAction SilentlyContinue
Enter fullscreen mode Exit fullscreen mode
- Ejecuta la instalación con permisos de usuario (sin administrador):
# ¡Importante! No uses "Run as Administrator" para el paso final
python -m pip install mitmproxy
Enter fullscreen mode Exit fullscreen mode
Instalar como administrador puede crear archivos con permisos restringidos que solo el sistema puede leer. Usa siempre permisos de usuario normal.
Bloque de código corregido (comando definitivo)
# Limpieza previa y reinstalación limpia
python -m pip uninstall -y cryptography cffi
Remove-Item -Recurse -Force "$env:TEMP\easy_install-*", "$env:TEMP\pip-*" -ErrorAction SilentlyContinue
python -m pip install --no-cache-dir --force-reinstall cryptography cffi
python -m pip install --no-cache-dir mitmproxy
Enter fullscreen mode Exit fullscreen mode
Pro-tip
-
Nunca uses
pipdirectamente en Windows. Siempre usapython -m pippara evitar conflictos entre múltiples instalaciones de Python (Python 2/3, venvs, Anaconda). - Si usas Anaconda/Miniconda, evita
pippara paquetes con dependencias binarias críticas; usaconda install -c conda-forge mitmproxyen su lugar. - Para evitar futuros bloqueos: configura una variable de entorno
TMPDIRapuntando a una carpeta donde tengas permisos absolutos:
[Environment]::SetEnvironmentVariable("TMPDIR", "C:\temp-pip", "User")
New-Item -ItemType Directory -Path "C:\temp-pip" -Force
Enter fullscreen mode Exit fullscreen mode
Esto fuerza a pip a usar
C:\temp-pipen lugar del%TEMP%del sistema.✅ Verificado en Windows 10/11 con Python 3.8–3.12. El 99% de los casos de "Access Denied" en
.pydse resuelven así.
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.