Criação de um projeto Python com Poetry¶
A utilização de ferramentas que permitam o gerenciamento das dependências de um projeto de software, é uma boa prática e também facilita o trabalho do desenvolvedor, pois muitas delas além da gestão das dependências também facilitam a criação e manutenção do projeto de software.
Cada linguagem de programação possui algum gerenciador de dependências, a exemplo temos Apache Mavem para aplicações Java e Kotlin, Gradle para aplicações Java, Groovy, Kotlin, Android, Scala e JavaScript, ainda para JavaScript temos NPM e Yarn e para Python além do Pip podemos contar com o Poetry.
O Objetivo deste post é apresentar a ferramenta de gerenciamento e empacotamento em Python, o Poetry, todo o conteúdo aqui exposto é uma tradução resumida do conteúdo disponibilizado no site oficial do Poetry.
O que é Poetry?¶
O Poetry é uma ferramenta para gerenciamento de dependências e empacotamento em Python. Ele permite a você declarar ou instalar as bibliotecas das quais seu projeto depende. Para mais informações acesse python-poetry.org.
Requisitos de sistema¶
Poetry requer Python 2.7 ou 3.5+. É multiplataforma e o objetivo é fazê-lo funcionar igualmente bem no Windows, Linux e OSX.
Importante
Segundo o desenvolvedor, a partir da versão 1.2 o Python 2.7 e 3.5 não terão mais suporte.
Instalação e atualização do Poetry¶
Instalação do Poetry via Terminal Linux/OSX¶
$ curl -sSL https://install.python-poetry.org | python3 -
<span style="color: #8be9fd;">Retrieving Poetry metadata</span>
This will download and install the latest version of <span style="color: #8be9fd;">Poetry</span>,
a dependency and package manager for Python.
It will add the `poetry` command to <span style="color: #8be9fd;">Poetry</span>'s bin directory, located at:
Welcome to <span style="color: #8be9fd;">Poetry</span>!
This will download and install the latest version of Poetry,
a dependency and package manager for Python.
It will add the `poetry` command to Poetry's bin directory, located at:
<span style="color: #f3f99d;">$HOME/.local/bin</span>
You can uninstall at any time by executing this script with the --uninstall option,
and these changes will be reverted.
Installing <span style="color: #8be9fd;">Poetry</span> (1.5.1): <span style="color: #f3f99d;">Done</span>
<span style="color: #8be9fd;">Poetry</span> (1.5.1) is installed now. Great!
To get started you need <span style="color: #8be9fd;">Poetry</span>'s bin directory (<span style="color: #f3f99d;">$HOME/.local/bin</span>) in your `PATH`
environment variable.
Add `export PATH="<span style="color: #f3f99d;">$HOME/.local/bin:$PATH</span>"` to your shell configuration file.
Alternatively, you can call <span style="color: #8be9fd;">Poetry</span> explicitly with <span style="font-weight: bold;">`$HOME/.local/bin/poetry`</span>.
You can test that everything is set up by executing:
<span style="font-weight: bold;">`poetry --version`</span>
Instalação do Poetry no Windows PowerShell¶
PS C:\Users\{username}> (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -
O instalador instala o Poetry na pasta ( HOME
) do usuário. No Linux/OSX, localizado em $HOME/.poetry/bin
e no Windows em %USERPROFILE%\.poetry\bin
, adicionando automaticamente as configurações necessária ao $PATH
.
Atualização do Poetry¶
Para atualizar o Poetry para a versão estável mais recente.
$ poetry self update
Updating to <span style="color: BlueViolet;">1.1.13</span>
- Downloading <span style="color: BlueViolet;">poetry-1.1.13-darwin.tar.gz</span> <span style="color: LimeGreen;">100%</span>
<span style="color: BlueViolet;">Poetry</span> (<span style="color: LimeGreen;">1.1.13</span>) is installed now. Great!
Configuração do Poetry¶
A configuração do Poetry pode ser feita diretamente no arquivo config.toml
que pode ser encontrado nos diretórios:
- Linux:
~/.config/pypoetry
- Mac OS:
~/Library/Application Support/pypoetry
- Windows:
C:\Users\<username>\AppData\Roaming\pypoetry
Outra forma de configurar o Poetry é por meio do comando poetry seguido do parâmetro config
.
$ poetry config --list
<span style="color: cyan;">cache-dir</span> = "/Users/{username}/Library/Caches/pypoetry"
<span style="color: cyan;">experimental.new-installer</span> = true
<span style="color: cyan;">installer.parallel</span> = true
<span style="color: cyan;">virtualenvs.create</span> = true
<span style="color: cyan;">virtualenvs.in-project</span> = true
<span style="color: cyan;">virtualenvs.path</span> = "{cache-dir}/virtualenvs" # /Users/{username}/Library/Caches/pypoetry/virtualenvs
As configurações disponíveis são:
cache-dir¶
Caminho para o diretório de cache usado pelo Poetry, padrão é um dos seguintes diretórios:
- Mac OS:
~/Library/Caches/pypoetry
- Windows:
C:\Users\<username>\AppData\Local\pypoetry\Cache
- Unix:
~/.cache/pypoetry
installer.parallel¶
Use a execução paralela ao usar o >=1.1.0. O padrão é true
.
virtualenvs.create¶
Cria um novo ambiente virtual, se ainda não houver um. O padrão é true
.
virtualenvs.path¶
Diretório onde os ambientes virtuais serão criados. O padrão é {cache-dir}/virtualenvs
para Linux e Mac OS e {cache-dir}\virtualenvsno
Windows.
repositories.¶
Defina um novo repositório alternativo. Consulte Repositories para mais informações.
virtualenvs.in-project¶
Uma variável importante, que setada como true
, define que o virtualenv
seja criado no diretório do raiz do projeto.
Nota
O Padrão desta variável é None
, fazendo com que o virtualenv
seja criado em: {cache-dir}/virtualenvs
no Linux/Mac OS
e {cache-dir}\virtualenvs
no Windows.
Utilização básica do Poetry¶
Criação e Configuração de um projeto - Project setup¶
Para criar um novo projeto basta chamar o poetry new <nome_do_projeto>
Utilizando o comando tree
, é possível ver a estrutura do projeto criado.
Nota
Veja mais opções para criação de um novo projeto com o comando poetry new --help
Utilizando o comando tree
, é possível ver a estrutura do projeto criado.
O arquivo pyproject.toml é o arquivo mais importante aqui. Através dele será possível fazer a gestão das dependências do projeto.
[tool.poetry]
name = "app"
version = "0.1.0"
description = ""
authors = ["Nome do author <email@author.com>"]
[tool.poetry.dependencies]
python = "^3.9"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Inicializar um projeto em um diretório pré-existente¶
Outra forma de inicializar um projeto Poetry é por meio do comando poetry init
$ mkdir poetry-demo
$ cd poetry-demo
$ poetry init
This command will guide you through creating your <span style="color: BlueViolet;">pyproject.toml</span> config.
<span style="color: BlueViolet;">Package name [</span><span style="color: LimeGreen;">poetry-demo</span><span style="color: BlueViolet;">]:</span>
<span style="color: BlueViolet;">Version [</span><span style="color: LimeGreen;">0.1.0</span><span style="color: BlueViolet;">]:</span>
<span style="color: BlueViolet;">Description []:</span> My first project with poetry
<span style="color: BlueViolet;">Author [</span><span style="color: LimeGreen;">Your name <username@domain.com>, n to skip</span><span style="color: BlueViolet;">]:</span>
<span style="color: BlueViolet;">License []:</span>
<span style="color: BlueViolet;">Compatible Python versions [</span><span style="color: LimeGreen;">^3.10</span><span style="color: BlueViolet;">]:</span>
<span style="color: BlueViolet;">Would you like to define your main dependencies interactively? (yes/no)</span> [<span style="color: LimeGreen;">yes</span><span style="color: BlueViolet;">]</span> no
<span style="color: BlueViolet;">Would you like to define your development dependencies interactively? (yes/no)</span> [<span style="color: LimeGreen;">yes</span><span style="color: BlueViolet;">]</span> no
<span style="color: BlueViolet;">Generated file</span>
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = "My first project with poetry"
authors = ["Your name <username@domain.com>"]
[tool.poetry.dependencies]
python = "^3.10"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
<span style="color: BlueViolet;">Do you confirm generation? (yes/no)</span> [<span style="color: LimeGreen;">yes</span><span style="color: BlueViolet;">]</span>
Adicionar dependências ao projeto¶
A maneira mais fácil de para se adicionar dependências ao projeto é pelo meio do comando poetry add <dependencia>
$ poetry add pendulum
Creating virtualenv <span style="color: cyan;">poetry-demo</span> in /Users/{username}/dados/workspaces-python/poetry-demo/.venv
Using version ^2.1.2 for <span style="color: cyan;">pendulum</span>
<span style="color: BlueViolet;">Updating dependencies</span>
<span style="color: BlueViolet;">Resolving dependencies...</span> (0.3s)
<span style="color: BlueViolet;">Writing lock file</span>
Package operations: <span style="color: BlueViolet;">4</span> installs, <span style="color: BlueViolet;">0</span> updates, <span style="color: BlueViolet;">0</span> removals
<span style="color: LimeGreen;">•</span> Installing <span style="color: cyan;">six</span> (<span style="color: LimeGreen;">1.16.0</span>)
<span style="color: LimeGreen;">•</span> Installing <span style="color: cyan;">python-dateutil</span> (<span style="color: LimeGreen;">2.8.2</span>)
<span style="color: LimeGreen;">•</span> Installing <span style="color: cyan;">pytzdata</span> (<span style="color: LimeGreen;">2020.1</span>)
<span style="color: LimeGreen;">•</span> Installing <span style="color: cyan;">pendulum</span> (<span style="color: LimeGreen;">2.1.2</span>)
Também é possível adicionar dependências ao projeto editando o arquivo pyproject.toml
- Sessão de dependências do projeto;
- Dependências do projeto em suas (versões/restrições), mais informações leia: Especificação de dependência;
- Sessão de dependências de desenvolvimento.
Instalação das dependências¶
Para instalar as dependências definidas no projeto, basta executar o comando poetry install
.
$ poetry install
Installing dependencies from lock file
<span style="font-weight: bold;">Package operations:</span> <span style="color: BlueViolet;">4</span> installs, <span style="color: BlueViolet;">0</span> updates, <span style="color: BlueViolet;">0</span> removals
<span style="color: LimeGreen;">•</span> Installing <span style="color: cyan;">six</span> (<span style="color: LimeGreen;">1.16.0</span>)
<span style="color: LimeGreen;">•</span> Installing <span style="color: cyan;">python-dateutil</span> (<span style="color: LimeGreen;">2.8.2</span>)
<span style="color: LimeGreen;">•</span> Installing <span style="color: cyan;">pytzdata</span> (<span style="color: LimeGreen;">2020.1</span>)
<span style="color: LimeGreen;">•</span> Installing <span style="color: cyan;">pendulum</span> (<span style="color: LimeGreen;">2.1.2</span>)
Nota
Ao executar a instalação das dependências o Poetry cria/grava todos os pacotes e suas versões exatas que baixou no *_poetry.lock_*
, este arquivo tem a função de bloquear o projeto para utilizar essas versões específicas, portanto este arquivos deve ser enviado junto ao repositório do projeto para que todas as pessoas que trabalham no projeto sejam bloqueadas para as mesmas versões de dependências.
O que aprendemos?¶
Neste post aprendemos de forma resumida a instalar e configurar o Poetry, criar projetos utilizando a ferramento e por fim aprendemos a instalar as dependências de um projeto de software Python.
Referências¶
POETRY. Site oficial do Poetry. Online disponível em: python-poetry.org. Acesso em 09/10/2021.