Pare de usar pip em seus projetos Python
Quem assim como eu, já foi introduzido ao desenvolvimento web em JavaScript, e migra, ou de repente se vê aprendendo Python, pode sentir falta de um gerenciador de pacotes como npm ou yarn.
O fluxo básico para se instalar alguma dependência em python com o pip é a seguinte:
> python -m venv venv
> source ./venv/bin/activate
> pip install <package>
Alguns (muitos, milhares) desenvolvedores python ainda costumam usar um arquivo de manifesto chamado requirements.txt para armazenar as dependências do projeto, tudo praticamente digitado à mão. Segue o comando para instalá-los
> pip install -r requirements.txt
Como você pode imaginar isso gera alguns problemas como o desenvolvedor se esquecer de adicionar o pacote no arquivo .txt, algumas subdependências que não são removidas corretamente e entre outros.
Pensando nisso o Poetry existe.
Poetry é um gerenciador de pacotes para Python que usa o pip, mas gerencia os pacotes com alguns diferenciais.
Ambientes virtuais automáticos
O poetry automaticamente cria seus próprios ambientes virtuais com a versão desejada do python e demais dependências.
Gerenciador de dependências
Assim como o npm tem o package.json e o package-lock.json, o poetry tem o poetry.lock (para travar as 'dependências' e subdependências) o pyproject.toml, que administra as dependências do projeto, podendo separá-las em grupo como dev (para dependências de desenvolvimento) e test (para dependências de teste).
Integração com Docker
O Poetry tem uma integração fantástica com o Docker, podendo gerenciar configurações pelo ENV do Dockerfile como por exemplo o controle de cache e criação ambiente virtuais.
Publicação de pacotes e bibliotecas
Pra quem faz pacotes e bibliotecas, essa aqui é uma mão na roda. Basta executar poetry build para construir as distribuições fonte e poetry publish para mandar o seu pacote direto para o PyPi.
Tutorial Básico
Criar um projeto novo com o poetry
> poetry new <nome-projeto>
Que vai criar um diretório assim
nome-projeto
├── pyproject.toml
├── README.md
├── nome_projeto
│ └── __init__.py
└── tests
└── __init__.py
Iniciar o poetry em um projeto já existente:
> poetry init
Instalar pacotes
> poetry add <nome_do_pacote>
E aí, se interessou pelo o Poetry?