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?
O poetry é sem dúvidas uma ótima escolha para grandes projetos, mas vale uma correção sobre o pip, principalmente em projetos legados e menores:
Em boa parte das vezes o desenvolvedor não adiciona cada pacote a mão, ele usa o comando "pip freeze --local > requirements.txt" que basicamente lista todas as dependências locais e gera um lock no arquivo com cada versão correspondente.
Ainda não vejo muito sentido em usar, virtualenv + pip freeze praticamente resolve tudo. Até legal ter o dependency resolver mas se usar o virtualenv com o freeze funciona muito bem e não preciso de +50 dependencias instaladas pelo poetry no meu projeto. Ainda assim, um dia talvez adote quando realmente ver alguma vantagem maior em usa-lo, pois o pip por padrão tem dependency resolver.
Cara, sensacional, é isso que a comunidade precisa saber. É um otimo gerenciador de pacotes, passei a usar em todos meus projetos Python!
Cara, muito bom, gosto muito do Poetry também. Uma coisa que me deixa bem desconfortável no pip é o fato de não gerenciar as subdepedências, tu apaga uma biblioteca e ele mantém as dependências dela, ainda que nenhuma outra dependência utilize-a...
Poetry é muito completo e até mais intuitivo pra galera que vem de NPM e Yarn, por exemplo, com criação de scripts e a organização do ambiente no arquivo TOML. Só sucesso! Muito bom teu arquivo, tamo junto 👏🏼
Só um adendo sobre ter que inserir manualmente pelo pip
no requirements.txt, o pip tem o comandopip freeze > requirements.txt
que faz isso. Mas no geral, realmente o poetry
tem mais recursos de manipulação de subdependências. O que o torna melhor em muitas situações.
Poetry é "poesia para os ouvidos". Brincadeiras à parte, é uma ferramenta sensacional. Em meu trabalho aderimos ao poetry para controlar dependências, mas ainda temos os legados com pip. Gosto muito de usar poetry, para mim, é bem mais seguro e robusto do que rodar as coisas na unha com pip, tratando-se de projetos maiores.
Que massa, eu ainda uso pouco o python mas com certeza vou usar o Poetry em projetos futuros, obrigado pela recomendação.
Não usei ainda. Eu cheguei a usar PDM. Quase a mesma ideia.
Achei perfeito! obrigado pela dica! Continue assim pois me ajudou muito!
Com certeza vou utilizar no meu próximo projeto. Ótimo conteúdo.