Ferramentas de gerenciamento de dependências para Python
Hayley Denbraver
15 de abril de 2020
0 minutos de leituraGerenciar dependências é essencial para a saúde do seu projeto Python. Um projeto com dependências bem gerenciadas traz benefícios como previsibilidade, sustentabilidade e segurança. Elas garantem um comportamento previsível nos ambientes local, de desenvolvimento e de produção. Com dependências bem gerenciadas, você não corre o risco de chegar ao fim do período de suporte de longo prazo nem de ter dependências incompatíveis entre si. O gerenciamento adequado também envolve saber quais pacotes você usa, direta ou indiretamente, entender os problemas de segurança e tomar as medidas necessárias para corrigi-los.
Gerenciar dependências bem pode ser difícil, e há várias maneiras de lidar com essa questão no seu projeto Python. Vamos apresentar algumas opções, com o objetivo de tornar o gerenciamento de dependências o mais simples possível.
Quais são minhas opções para gerenciar dependências em Python?
Venv
O módulo venv faz parte da biblioteca padrão do Python desde a versão 3.3. Se você tem o Python 3.3 ou superior instalado, já tem o venv. Ele é usado para criar ambientes virtuais, que incluem uma instalação própria do Python, equivalente à versão usada para criar o ambiente. Para saber mais sobre como criar um ambiente com o venv, ativá-lo e instalar pacotes nele, consulte a documentação oficial do Python. O venv é fácil de usar, leve e uma ótima opção para muitos projetos Python.
Virtualenv
O Virtualenv é uma biblioteca de terceiros que cria ambientes virtuais e pode ser usada com versões mais antigas do Python. Muitos desenvolvedores migraram para o `venv` quando ele foi incluído na biblioteca padrão, no Python 3.3. O Python 2.7 chegou ao fim da vida útil no início de 2020, e não recomendamos seu uso. No entanto, se você tem um projeto que usa Python 2.7, pode criar ambientes virtuais com o virtualenv. O virtualenv também oferece recursos que não estão disponíveis no venv, por isso há quem use o virtualenv em projetos Python 3. Entre esses recursos estão a possibilidade de atualização pelo pip, melhorias de desempenho e uma API abrangente. Até o momento desta publicação, o virtualenv é mantido ativamente, e sua versão mais recente foi lançada em abril de 2020. Embora muitos o associem ao Python 2.7, ele continua ativo e funcionando com o Python 3.
Pipenv
O Pipenv é uma opção de gerenciamento de dependências com vários recursos extras. Seu diferencial mais evidente é o uso de um arquivo de bloqueio para garantir builds determinísticos. Ele também oferece recursos avançados, como especificar um índice de pacotes, detectar vulnerabilidades de segurança, facilitar o gerenciamento de variáveis de ambiente e funcionar bem no Windows. Até o momento desta publicação, a versão mais recente do Pipenv foi lançada no fim de 2018. Como ele não recebe atualizações há um ano e meio, alguns desenvolvedores Python podem hesitar em usá-lo. Considero a ferramenta fácil de usar, mas talvez não a escolhesse para um projeto que pretendo desenvolver e manter por muito tempo.
Poetry
O Poetry é uma ferramenta para gerenciamento de dependências e empacotamento em Python. Assim como o Pipenv, o Poetry usa um sistema de arquivos de bloqueio para garantir builds determinísticos. O Poetry sempre garante que você esteja usando um ambiente virtual, evitando que as instalações globais sejam afetadas. Você pode declarar as dependências pela linha de comando ou editar o arquivo pyproject.toml. O Poetry facilita a definição de restrições de versão, o que é ótimo para evitar versões com vulnerabilidades de segurança conhecidas. Até o momento desta publicação, o Poetry é mantido ativamente. Sua versão mais recente foi lançada em fevereiro de 2020, e uma versão preliminar, em março de 2020.
Pip-tools
O Pip-tools é um conjunto de ferramentas de código aberto que ajuda a manter atualizados os pacotes baseados em pip, mesmo quando suas versões estão fixadas. (Fixar versões ajuda a garantir builds determinísticos.) O Pip-tools é composto por dois comandos distintos: `pip-compile` e `pip-sync`. O comando `pip-compile` cria o arquivo `requirements.txt`, e o comando `pip-sync` instala os pacotes de forma previsível, de acordo com esse arquivo. Até o momento desta publicação, o Pip-tools é mantido ativamente, e sua versão mais recente foi lançada em fevereiro de 2020.
Hatch
O Hatch é uma ferramenta de produtividade de código aberto que ajuda a gerenciar dependências e também oferece recursos para testes, entre outros. Ele inclui ferramentas para interagir com o PyPI, o que o torna uma ótima opção para quem mantém projetos de código aberto. Até o momento desta publicação, o Hatch parece ser mantido ativamente. Sua versão mais recente foi lançada em outubro de 2019. Algumas outras opções desta lista receberam atualizações mais recentes, mas, do ponto de vista da manutenção, esta provavelmente é uma escolha segura.
Como saber se há vulnerabilidades de segurança nos projetos que uso?
As ferramentas da seção anterior ajudam a garantir que suas dependências sejam instaladas, estejam atualizadas e isoladas de outras versões que você talvez tenha instalado para outros projetos. Com elas, você pode ter builds previsíveis e estáveis em diferentes ambientes.
Ao avaliar suas dependências, os aspectos mencionados acima são muito importantes, mas não são os únicos que merecem atenção. Você também precisa saber se há vulnerabilidades de segurança nas dependências e corrigi-las. O Pipenv oferece alguns recursos relacionados a vulnerabilidades conhecidas. Independentemente da ferramenta de gerenciamento de dependências que você escolher, a Snyk pode ajudar você a encontrar e corrigir vulnerabilidades nas dependências do seu projeto Python. Você pode até abrir uma solicitação de pull request para aplicar a correção diretamente no nosso painel. E o melhor: a Snyk é gratuita para projetos de código aberto e públicos. Nosso plano gratuito inclui 200 análises por mês para repositórios privados. Nunca foi tão fácil usar código aberto com segurança.
Comece a resolver desafios de capture the flag
Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.
