~/Gerenciando dependências de projetos Python com Poetry

Nem sempre o processo de gestão de dependências e publicação com projetos Python é um trabalho simples. Existem muitas ferramentas envolvidas no ecossistema: virtualenv, pip, pipenv, etc. E muitas vezes pode se tornar um pouco confuso.

Para facilitar a nossa vida existe uma ferramenta que se chama Poetry!

Instalação

Antes de mais nada precisamos instalar o poetry na nossa máquina.

❯ brew install poetry
❯ poetry --version      
Poetry version 1.1.6

Aqui vemos que temos a versão 1.1.6 instalada. Para atualizar a poetry, você pode executar:

❯ poetry self update

Você também pode instalar poetry usando o comando pip tradicional, mas o poetry fica limitada a criar ambientes virtuais para a versão python para a qual foi instalado.

Inicializar um projeto

Para estudar poetry, vamos criar um novo projeto com o nome de 'poet':

❯ poetry new poet
Created package poeta in poet

A estrutura em árvore do projeto criado é semelhante à seguinte.

├── pyproject.toml
  ├── README.rst
  ├── poet
  │   └── __init__.py
  └── tests
    ├── __init__.py
    └── test_poet.py

O arquivo pyproject.toml contém todas as informações necessárias para gerenciar nosso pacote. Mas caso você já tenha um projeto e deseja gerenciar as dependências com poetry, pode usar o comando init. Você receberá um shell interativo para configurar seu projeto.

❯ poetry init

Adicionando um pacote

Certo, vamos supor que precisamos manipular datas e será necessário importar uma biblioteca, com poetry, adicionar uma dependência é simples.

❯ poetry add arrow

Remova um pacote

Remover um pacote também é uma tarefa simples, graças ao comando remove.

❯ poetry remove arrow

Instale o pacote e dependências

Para instalar o pacotes e suas dependências basta rodar o comando:

❯ poetry install

Listar dependências

Para listar todas as dependências instaladas, podemos usar o comando show.

❯ poetry show
arrow           1.1.0  Better dates & times for Python
attrs           21.2.0 Classes Without Boilerplate
more-itertools  8.8.0  More routines for operating on iterables, beyond itertools
packaging       20.9   Core utilities for Python packages
pluggy          0.13.1 plugin and hook calling mechanisms for python
py              1.10.0 library with cross-python path, ini-parsing, io, code, log facilities
pyparsing       2.4.7  Python parsing module
pytest          5.4.3  pytest: simple powerful testing with Python
python-dateutil 2.8.1  Extensions to the standard Python datetime module
six             1.16.0 Python 2 and 3 compatibility utilities
wcwidth         0.2.5  Measures the displayed width of unicode strings in a terminal

Ambiente virtual

Precisamos ativar nosso ambiente com o comando shell

❯ poetry shell
Virtual environment already activated: /Users/f0rmig4/Library/Caches/pypoetry/virtualenvs/poet-vHKbTPL9-py3.9

Para obter informações importante do nosso ambiente virtual o comando info pode ser muito útil

❯ poetry env info
Virtualenv
Python:         3.9.5
Implementation: CPython
Path:           /Users/f0rmig4/Library/Caches/pypoetry/virtualenvs/poet-vHKbTPL9-py3.9
Valid:          True

System
Platform: darwin
OS:       posix
Python:   /usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9

Também podemos adicionar a opção “- path” ao comando anterior para obter apenas o caminho do ambiente virtual

❯ poetry env info --path
/Users/f0rmig4/Library/Caches/pypoetry/virtualenvs/poet-vHKbTPL9-py3.9

Mão na massa

Vamos criar um simples script Python para estudo:

❯ cd poet
❯ vi poet/run.py

Adicione o seguinte conteúdo:

"""Run App"""

import arrow

def run():
  arw = arrow.utcnow()
  print(f"Date Now: {arw}")

if __name__ == "__main__":
  run()

Executar o nosso script

Para executar seu script basta usar o comando run:

❯ poetry run python poet/run.py

Build

Agora para construir um pacote, basta executarmos o comando build!

❯ poetry build

Agora estamos prontos para iniciar projetos python de forma simples e rápida. Tudo o que você precisa lembrar deste ponto em diante é usar Poetry - e apenas Poetry - para gerenciar todas as dependências para os seus projetos.

Que a força esteja com vocês!


Published Jun 20, 2021 by f0rmig4