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

Node.js, Python e DockerPython e outras linguagens··· 1.113 visualizações· 3 min de leitura

Escreveu pip install num VPS e recebeu error: externally-managed-environment. Não está quebrado nem sem permissões: é uma proteção. Em sistemas mais recentes (por exemplo versões novas de Ubuntu e Debian), o Python do sistema pertence ao gerenciador 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 projeto. É o que o erro lhe está pedindo.

As saídas, da melhor para a pior

Quer instalar… Faça isto Por quê
As bibliotecas de um projeto (a sua aplicação) Um ambiente virtual por projeto: python3 -m venv .venv e depois .venv/bin/pip install .... Isola o projeto 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 atualizações de segurança do sistema.
Qualquer coisa, à força pip install --break-system-packages ... Desliga a proteçã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 projeto: cd ~/minha-app
python3 -m venv .venv
3 Ative-o e instale:source .venv/bin/activate
pip install -r requirements.txt
Com o ambiente ativo, 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 ativam nada por si: aponte diretamente 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 ativo.
Não apague o arquivo EXTERNALLY-MANAGED do sistema nem faça sudo pip install para «calar» o erro. Isso é exatamente o que a proteção quer evitar: uma atualização do sistema pode trazer de volta uma versão antiga de uma biblioteca, ou uma ferramenta do sistema deixa de iniciar. 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 operacional que escolheu no pedido: versões mais antigas, como o Ubuntu 22.04 LTS, não trazem a proteção. Mesmo assim, o ambiente virtual continua sendo a boa prática: um projeto, um ambiente. Na hospedagem compartilhada 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

Rodar Flask ou Django com gunicorn e systemd num VPS

Que sistema operacional escolher para o seu VPS ou servidor

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

PRODUTO RECOMENDADO

Hospedagem de sites com cPanel

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

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.