Executando verificação de segurança...
20

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?

https://python-poetry.org/

Carregando publicação patrocinada...
7

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.

1

concordo, requirements não foi pensado pra fazer a mão rs. agora que começarei com poetry, estava no windows 7 e python3.6 até mês passado! só vejo maravilhas sobre. De qualquer forma, obrigado pelo artigo!

1

Confesso que o título do artigo foi um clickbait hehe. O pip é ótimo no que faz, inclusive o próprio Poetry usa ele.

A parte do requirements eu comentei pois já vi muitos colegas de trabalho que se esqueceram de adicionar uma dependência ao pip ou quando foram remover acabou sobrando uma subdependência solta no projeto, sabe?

De qualquer forma eu não abandonei o pip, como tu disse, em projetos menores ele cai como uma luva.

Obrigado por comentar e agregar informação ao artigo!

2

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.

1

Pip ainda é o padrão no Python então pra projetos mais simples, sem tanta dependência ele é mais prático do que ajustar um ambiente Poetry mesmo.

Obrigado por comentar

1
1
1

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 👏🏼

1
1

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.

1

Você tem razão, esse comando é muito útil no pip, mas na minha experiência com ele, além de ser inconveniente ficar rodando pip freeze > requirements.txt toda vez depois de instalar um pacote, o comando acabava escrevendo algumas subdependências e eu não gostava nada disso pois acabava que ninguém sabia quais eram as reais dependências do projeto, entende?

Obrigado por contribuir para o artigo.

1

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.

1
1
1
0
0
1

Me ajudou tambem! Tava com -2 tabcoins! parei um pouquinho mais no mundo baiton mas ainda gosto inclusive tô criando uma linguagem de programação que tal um dia quando eu colocar no Github você dar uma olhada! 😃 (obs: EM BREVE)

1
0