O pip diz «externally-managed-environment»: porque acontece e a solução certa

Escreveu pip install num VPS e recebeu error: externally-managed-environment. Não está avariado nem sem permissões: é uma protecção. Em sistemas mais recentes (por exemplo versões novas de Ubuntu e Debian), o Python do sistema pertence ao gestor de pacotes do sistema, e o pip recusa-se a instalar lá bibliotecas por cima, para não estragar as ferramentas do próprio sistema que dependem dele. A resposta curta: use um ambiente virtual para cada projecto. É o que o erro lhe está a pedir.

As saídas, da melhor para a pior

Quer instalar… Faça isto Porquê
As bibliotecas de um projecto (a sua aplicação) Um ambiente virtual por projecto: python3 -m venv .venv e depois .venv/bin/pip install .... Isola o projecto do sistema. É a regra para qualquer aplicação.
Uma ferramenta de linha de comandos escrita em Python O pipx (sudo apt install pipx em Ubuntu e Debian), que cria um ambiente à parte para cada ferramenta. A ferramenta fica disponível no terminal sem tocar no sistema.
Uma biblioteca que o sistema já oferece O pacote da distribuição, por exemplo sudo apt install python3-requests. Vem com as actualizações de segurança do sistema.
Qualquer coisa, à força pip install --break-system-packages ... Desliga a protecção. É o último recurso: pode estragar ferramentas do sistema.

O ambiente virtual, passo a passo

1 Instale o que falta para criar ambientes: sudo apt update
sudo apt install python3-venv python3-pip
Se o python3 -m venv se queixar de «ensurepip is not available», é este pacote que falta.
2 Crie o ambiente na pasta do projecto: cd ~/minha-app
python3 -m venv .venv
3 Active-o e instale:source .venv/bin/activate
pip install -r requirements.txt
Com o ambiente activo, o prompt mostra (.venv) e o pip é o do ambiente. Confirme com pip --version.
4 Use o Python do ambiente nos serviços. O systemd, o PM2 e o Docker não activam nada por si: aponte directamente para /caminho/da/app/.venv/bin/python (ou para o gunicorn de lá). Veja gunicorn e systemd.
5 Guarde as versões que funcionam: pip freeze > requirements.txt, com o ambiente activo.
Não apague o ficheiro EXTERNALLY-MANAGED do sistema nem faça sudo pip install para «calar» o erro. Isso é exactamente o que a protecção quer evitar: uma actualização do sistema pode trazer de volta uma versão antiga de uma biblioteca, ou uma ferramenta do sistema deixa de arrancar. Se uma aplicação sua parou depois de uma instalação feita assim, o remédio é recriar o ambiente virtual.
Não viu este erro e esperava vê-lo? Depende do sistema operativo que escolheu na encomenda: versões mais antigas, como o Ubuntu 22.04 LTS, não trazem a protecção. Mesmo assim, o ambiente virtual continua a ser a boa prática: um projecto, um ambiente. Na hospedagem partilhada o «Setup Python App» já cria o ambiente por si: Python no cPanel.

Precisa de um servidor onde escolher o sistema e instalar as suas ferramentas? Veja os VPS.

Ver os servidores VPS

VEJA TAMBÉM

Python no cPanel: ambientes virtuais e pip

Correr Flask ou Django com gunicorn e systemd num VPS

Que sistema operativo escolher para o seu VPS ou servidor

Até onde vai o nosso suporte: o que tratamos e o que é seu

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?