Soluciona el error "externally-managed-environment" al ejecutar pip con python3
Si has actualizado python a una versión superior a 3.10 seguramente tengas este error al ejecutar 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.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.11/README.venv for more information.
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
¿Por qué ocurre?
Simplemente porque a partir de la versión 3.11 en adelante, se añade una pequeña capa de seguridad que controla la instalación de paquetes externos.
Esto te indica que te recomienda instalar el paquete dentro de un entorno virtual (Virtual ENV) o que instales ya el paquete compilado con apt install python3-PAQUETE
Solución
Tienes varias opciones. Aquí te las enumero y tú decides cual aplicar:
- Seguir la recomendación y crear un entorno virtual con virtualenv para después instalar el paquete
- Seguir otra recomendación e instalar el paquete ya compilado (si existe) con apt install python3-PAQUETE
- Ejecutar pip evitando esta comprobación con de la siguiente forma:
pip install PAQUETE --break-system-packages
- Eliminando esta nueva capa de comprobación directamente en la máquina de la siguiente forma:
sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED
- Aplicando una configuración en tu usuario para des-habilitar la comprobación de la siguiente forma:
mkdir -p ~/.config/pip touch ~/.config/pip/pip.conf # Añade las siguientes lineas en el fichero creado [global] break-system-packages = true
Tienes varias opciones! Algunas más elegantes que otras pero todas son vaĺidas, tu eliges!