# Python

Mis notas de Python: errores, soluciones y cosas que quiero tener a mano para no pelearme con pip cada dos semanas.

# Solucionar el error "externally-managed-environment" al usar pip

---
Cuando intentas actualizar `pip` o instalar paquetes en sistemas gestionados por tu distribución (como Ubuntu o Debian), puedes encontrarte con este error:

```bash
➜ pip install --upgrade pip
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
    ...
```

No es grave, y tiene solución. Este mensaje aparece desde Python 3.11 con la implementación del [PEP 668](https://peps.python.org/pep-0668/), que busca proteger el entorno Python del sistema. Aquí explico cómo saltarse esta restricción de forma controlada.

---

### Soluciones disponibles

---

#### 1. Renombrar el archivo `EXTERNALLY-MANAGED`

Es la opción más directa y reversible. No modifica el sistema en profundidad:

```bash
sudo mv /usr/lib/python3.11/EXTERNALLY-MANAGED /usr/lib/python3.11/EXTERNALLY-MANAGED.old
```

Después ya puedes usar `pip` sin restricciones:

```bash
pip install --upgrade pip
```

Si algo da problemas, se revierte fácilmente:

```bash
sudo mv /usr/lib/python3.11/EXTERNALLY-MANAGED.old /usr/lib/python3.11/EXTERNALLY-MANAGED
```

> ⚠️ La ruta puede variar: ajusta la versión según tu Python (ej. `3.12` en vez de `3.11`).

---

#### 2. Usar un entorno virtual (recomendado por Python)

Más limpio y seguro, aunque requiere cambiar el flujo de trabajo:

```bash
python3 -m venv ~/mi-entorno
source ~/mi-entorno/bin/activate
```

Ahora puedes instalar paquetes sin afectar al sistema.

---

#### 3. Usar `pipx` para instalar aplicaciones

Aísla aplicaciones Python en entornos virtuales gestionados automáticamente:

```bash
sudo apt install pipx
pipx install nombre-del-paquete
```

Ideal si solo necesitas instalar herramientas CLI como `httpie`, `poetry`, etc.

---

### ¿Cuál prefiero?

Depende del caso:

* **Para entornos estables o producción:** mejor usar venv o pipx.
* **Para máquinas personales o pruebas rápidas:** renombrar el archivo es más práctico.

---

### Notas finales

* Mover el archivo `EXTERNALLY-MANAGED` no borra nada y puede revertirse. Aun así, es una modificación del sistema.
* Si quieres ir a lo seguro, usa `venv` o `pipx`.
* Para más detalles, consulta el [PEP 668](https://peps.python.org/pep-0668/).

---