惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
G
Google Developers Blog
人人都是产品经理
人人都是产品经理
U
Unit 42
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
B
Blog RSS Feed
The Cloudflare Blog
D
Docker
A
About on SuperTechFans
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
月光博客
月光博客
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
The GitHub Blog
The GitHub Blog
博客园_首页
Stack Overflow Blog
Stack Overflow Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Cómo solucionar el error de permisos con `pip.exe` en ent...
Erick Eduardo Ramos · 2026-06-18 · via DEV Community

Erick Eduardo Ramos

Cómo solucionar el error de permisos con pip.exe en entornos virtuales de Python en Windows

Explicación técnica

El error "Access is denied" al ejecutar pip.exe desde un entorno virtual en Windows no suele deberse a permisos de archivo reales (como se descartó con icacls), sino a un problema en el launcher empaquetado dentro de pip.exe. Este archivo .exe es un stub que contiene incrustado:

  • La ruta absoluta al python.exe del entorno virtual
  • El código de pip.__main__ (como un ZIP embebido)

Cuando se crea el entorno virtual, si el python.exe usado para crearlo tenía una ruta incompleta, corrompida, o apuntaba a un binario que ya no existe o no tiene permisos de ejecución, el launcher quedaría roto. Esto es especialmente común tras:

  • Mover o reinstalar Python
  • Usar múltiples instalaciones (Microsoft Store vs python.org)
  • Cambiar de versión de Python sin recrear el entorno virtual
  • Permisos de ejecución restringidos por políticas de grupo (aunque menos frecuente en entornos de usuario)

El hecho de que python -m pip funcione correctamente confirma que el problema es específico del launcher pip.exe, no del entorno virtual ni de los permisos del usuario.


Pasos para solucionarlo

1. Verifica la ruta embebida en pip.exe

Crea un script check_pip_launcher.py con el siguiente contenido:

import sys

def extract_python_path(pip_exe_path):
    with open(pip_exe_path, 'rb') as f:
        data = f.read()[-4096:]  # Últimos 4KB del archivo (donde se embebe la info)

    # Buscar el ZIP central directory (PK\x05\x06)
    i = data.rfind(b'PK\x05\x06')
    if i == -1:
        print("ERROR: No se encontró el ZIP incrustado (pip.exe corrupto)")
        return

    # Buscar el shebang '#!' que precede al ZIP
    i0 = data.rfind(b'#!', 0, i) + 2
    i1 = data.find(b'\n', i0)
    if i0 == 1 or i1 == -1:
        print("ERROR: No se encontró la ruta embebida")
        return

    path = data[i0:i1].strip(b'"').decode('utf-8')
    print(f"Ruta embebida en pip.exe: {path}")
    return path

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Uso: python check_pip_launcher.py <ruta_a_pip.exe>")
        sys.exit(1)

    extract_python_path(sys.argv[1])

Ejecútalo desde CMD (no Bash) y sin activar el entorno virtual:

python check_pip_launcher.py "C:\Users\<username>\<project dir>\venv\Scripts\pip.exe"

Resultado esperado:

Ruta embebida en pip.exe: C:\Users\<username>\AppData\Local\Programs\Python\Python310\python.exe

Resultado problemático:

  • Ruta a un archivo que ya no existe
  • Ruta a python.exe de Microsoft Store (ej. C:\Users\<username>\AppData\Local\Microsoft\WindowsApps\python.exe)
  • Ruta vacía o corrupta

2. Recrea pip.exe en el entorno virtual

Opción A: Reinstalar pip en el entorno (recomendada)

cd C:\Users\<username>\<project dir>\venv\Scripts
python -m ensurepip --upgrade
python -m pip install --upgrade pip

Esto regenera los launchers (pip.exe, pip3.exe, etc.) usando el python.exe actual del entorno.

Opción B: Eliminar y recrear el entorno virtual (si persiste)

# Desactiva el entorno si está activo
deactivate

# Elimina el entorno
rmdir /s /q "C:\Users\<username>\<project dir>\venv"

# Recréalo con la versión correcta de Python
python -m venv "C:\Users\<username>\<project dir>\venv"

# Actívalo
C:\Users\<username>\<project dir>\venv\Scripts\activate

# Verifica que pip.exe funcione
pip --version

⚠️ Importante: Usa siempre la misma versión de Python para crear el entorno. Si usas py -3.10 o py -3.11, asegúrate de invocar explícitamente la versión deseada.


3. Verificación final

Ejecuta desde CMD (sin Bash):

"C:\Users\<username>\<project dir>\venv\Scripts\pip.exe" --version

Éxito: Mostrará la versión de pip sin errores.


Bloque de código corregido (resumen rápido)

:: 1. Verifica la ruta embebida
python check_pip_launcher.py "C:\path\to\venv\Scripts\pip.exe"

:: 2. Si falla, reinstala pip en el entorno
cd "C:\path\to\venv\Scripts"
python -m ensurepip --upgrade
python -m pip install --upgrade pip

:: 3. Verifica
pip --version


Pro-tip: Evita este problema en el futuro

  • Nunca muevas o renombres el directorio del entorno virtual (venv/). Si lo haces, recrea el entorno.
  • Usa python -m pip en lugar de pip en scripts y CI/CD. Es más robusto y evita el uso de launchers.
  • Preferiblemente usa py -3.10 -m venv venv en lugar de python -m venv venv, para evitar ambigüedad entre múltiples instalaciones.
  • Si usas Microsoft Store Python, desinstálalo y usa la versión oficial de python.org, ya que el Store tiene limitaciones de sandboxing que afectan launchers.

🔍 Nota clave: El problema no es de permisos del archivo, sino de rutas rotas embebidas en el launcher. pip.exe no es un binario estándar: es un ZIP autoextraíble con una ruta fija al intérprete. Si esa ruta ya no es válida, el launcher fallará con "Access is denied".