Atualizando todos os pacotes do requirements.txt da sua app Python

01/10/2020 - 3 min de leitura

PYTHON

Quando desenvolvemos softwares o mais correto é criar uma espécie de "receita" da aplicação que diz: "meu software, para ser criado e funcionar devidamente, precisa ter essas libs em versões específicas instaladas no sistema". Essa receita ou contrato, principalmente no Python, é o arquivo requirements.txt. Esse arquivo é responsável por guardar todas as dependências, juntamente com as suas versões, do nosso projeto.

Porém, quando o projeto começa a ficar um pouco maior, é bastante normal utilizar-se de mais libs de terceiros, fazendo com que o arquivo requirements.txt cresça ainda mais, fazendo com que o projeto tenha mais dependências.

Acontece que a tecnologia evolui rapidamente. A todo momento, as libs do Python estão sendo atualizadas e melhoradas. Então, como fazer para atualizar todas as dependências do projeto Python de uma vez só?

Contexto

Esses dias fui convidado para entrar em um projeto muito bacana da universidade. Um sistema Django gigante e cheio de módulos. Esse projeto começou a ser desenvolvido entre 2017-2018 (nem faz tanto tempo assim né?) e, para a minha surpresa, o sistema já está legado 😱

Fiquei bastante intrigado, pois, como é que pode um sistema tão novo desse, que sai módulo novo toda hora, já estar legado?

Infelizmente isso acontece o tempo todo. A maioria dos projetos vão se tornando cada vez mais difícil de dar manutenção. No caso desse sistema, ainda é utilizado o Django 1.11 (já estamos na 3.1). Ainda não é difícil de dar manutenção nele, pois o pessoal do Django gosta de manter as coisas funcionando entre uma versão e outra do framework. Porém, a cada nova versão lançada de qualquer framework e lib, vai ficando cada vez mais difícil dar manutenção a versão antiga.

Solução

Como eu havia mencionado logo a cima, o sistema era muito grande e cheio de módulos. O arquivo requirements.txt tinha 34 linhas. E não era eu quem ia atualizar cada dependência uma a uma.

para quem não sabe, o pip não tem um comando chamado pip upgrade-all

Felizmente, achei uma lib chamada upgrade-requirements. E, no meu caso, caiu como uma luva. Com um comando, você atualiza todo as suas dependências. É muito simples. Basta você digitar esses comandos:

(env)~$ pip install upgrade-requirements
(env)~$ upgrade-requirements

Após o ultimo comando, ele vai ler o seu arquivo requirements.txt e atualizar de um por um cada dependência no seu virtualenv. No final do processo, ele já atualiza o arquivo de dependência pra você.

OBS: Caso você não utilize um arquivo chamado de requirements.txt você pode especificar qual arquivo é através da flag -r. Algo como upgrade-requirements -r dependencias.txt

Conclusão

O upgrade-requirements ajuda demais e poupa nosso tempo. Nunca deixe de olhar o código dessa lib. É um arquivo extremamente simples e com a licença MIT. Se você tiver alguma melhoria para sugerir na lib, você pode clonar, fazer sua própria versão dela e enviar ou não um pull request. Você escolhe 😄

Atualizem sempre que puder (e for seguro) para as novas versões das libs. Cada nova atualização são novas funcionalidades, melhorias e correções de bugs que os desenvolvedores enviam. Com certeza você não quer perder isso né?

Foto da capa by Icons8 Team on Unsplash

Compartilhe

Twitter