Simplificando o sistema de bibliotecas com Python

Simplificando o sistema de bibliotecas com Python

As bibliotecas, também chamadas de pacotes, basicamente são um conjunto de módulos (que são simples arquivos de código) que facilitam o desenvolvimento de novos projetos de software. A ideia por trás delas é pegar um código que está se repetindo com frequência e encapsular ele para ser usado futuramente em diferentes programas. Com isso,  você pode criar e utilizar as suas próprias ou instalar bibliotecas de terceiros. Nesse artigo, vamos ver com mais detalhes como isso pode ser feito utilizando a linguagem Python.

Gerenciadores de pacotes

Antigamente era comum instalar bibliotecas como qualquer outro programa e adicioná-las manualmente no seu código, porém, com múltiplos desenvolvedores trabalhando simultaneamente nos mesmos projetos e a necessidade de escalar rapidamente os serviços, surgiu a demanda para a criação de um sistema de gerenciamento de pacotes para organizar o código e agilizar no processo de desenvolvimento.

Podemos dividir os gerenciadores de pacotes em dois tipos: aqueles do sistema operacional (que são utilizados para instalar todo tipo de software, não especificamente voltado para programação) como no caso do Linux que temos o APT e aqueles voltados a linguagens de programação específicas, como o NPM ou o Yarn para Javascript e o Pip ou Conda para Python.

Módulos Built-In

Muito utilizados, os módulos built-In, fazem parte da biblioteca Standard (Também chamadas de bibliotecas nativas), estas são as que vem junto com a linguagem de programação quando você instala, não sendo necessário utilizar um gerenciador de pacotes nem instalar manualmente. Alguns exemplos são: sockets, threading, multiprocessing e datetime.

Como instalar e importar no Python

A instalação de bibliotecas no python com o gerenciador de pacotes pip é feita a partir do seguinte comando no terminal:

pip install nome_da_biblioteca

Você também pode optar por escolher uma versão específica de uma biblioteca, basta colocar dois sinais de igual e em seguida o número da versão:

pip install pillow==5.2.0

Criando seus próprios módulos e pacotes

Agora faremos um simples exercício criando nossa própria biblioteca para praticar a importação e evitar os erros "ModuleNotFoundError” e “NameError”.

Primeiro crie uma pasta chamada de “pacote1”, depois um arquivo python chamado “modulo1” dentro dela com o seguinte código:

def SomaDoisNumeros(num1, num2):
    return num1 + num2

def MultiplicaDoisNumeros(num1, num2):
    return num1 * num2

Essas funções são bem simples e autodescritivas, uma soma e a outra multiplica dois números, vamos utilizá-las para testar nosso sistema. Essa estrutura que acabamos de criar, já pode ser considerada uma biblioteca acima das versões 3.x do Python, basicamente é só uma pasta com arquivos Python.

Nas versões mais antigas do Python 2.x utilizava-se um arquivo vazio chamado “__init__.py”, e era através dele que a linguagem identificava que aquela pasta era um pacote Python. Nas versões mais recentes esse arquivo não é mais obrigatório, mas normalmente ainda é utilizado para manter a compatibilidade.

Agora crie outro arquivo Python um nível acima (fora da pasta pacote1), chamado “main.py”, e nele utilizaremos as funções no módulo 1 da biblioteca que acabamos de criar. Primeiro com o método de importar todo o módulo:

from pacote1 import modulo1
print(modulo1.SomaDoisNumeros(1,2))

Se tudo estiver correto, ao executar, no terminal aparecerá  o resultado da soma. Transforme esse código em comentário e utilize o método de importar as funções do módulo diretamente da seguinte forma:

from pacote1.modulo1 import MultiplicaDoisNumeros
print(MultiplicaDoisNumeros(4,3))

No terminal deve aparecer o resultado da multiplicação, você também pode importar todas as funções e classes de um determinado módulo apenas substituindo o nome da função por um asterisco:

from pacote1.modulo1 import *
print(SomaDoisNumeros(1, 2))
print(MultiplicaDoisNumeros(4,3))

Ao executar, devem aparecer ambos, o resultado da soma e da multiplicação. Essa notação também pode ser utilizada para importar todos os módulos presentes em uma biblioteca, mas primeiro é necessário criar o arquivo “__init__.py” dentro da pasta pacote1 e dentro dele vamos atribuir o nome de cada módulo em uma lista para a variável “__all__”:

__all__ = ["modulo1"]

Se tivéssemos outros módulos, bastava adicionar na lista. Agora podemos utilizar a seguinte notação para trabalhar com esse módulo:

from pacote1 import *
print(modulo1.SomaDoisNumeros(1,2))

Uma prática bastante comum também é encurtar o tamanho do nome dos pacotes nos imports através do comando ‘as’, assim evita ter que escrever o nome todo quando for usar, veja o exemplo encurtando a biblioteca Pandas:

import pandas as pd
novo_dataframe = pd.Dataframe() 

Vale ressaltar que na hora que for instalar e importar bibliotecas de terceiros, verificar sempre se o nome e a versão são exatamente iguais ao da biblioteca com a qual você está querendo trabalhar, pois podem haver bibliotecas com nomes parecidos e na hora de importar pode dar erro caso tenha instalado a errada.

Boas práticas ao trabalhar com bibliotecas

Uma boa prática antes de instalar bibliotecas no python é criar ambientes virtuais, pois assim você pode isolar as dependências para cada projeto. E isso evita que caso tenha projetos trabalhando com versões diferentes, entre em conflito. Para criar um ambiente virtual é simples, basta digitar o seguinte comando no terminal:

python -m venv nome_do_ambiente_virtual

Para ativá-lo no Windows, digite o seguinte comando:

.\nome_do_ambiente_virtual\Scripts\activate

Já se estiver utilizando o Linux, o comando é o seguinte:

source nome_do_ambiente_virtual/bin/activate

Outra boa prática: na hora de compartilhar o seu código com outro desenvolvedor em gerenciadores de versão como o GitHub, ao invés  de enviar as bibliotecas junto para o repositório, declara-se no arquivo .gitignore o nome da pasta onde foram instaladas as bibliotecas para que ignoradas na hora de enviar o código (fazer o commit e push), que no caso do Python é na pasta do ambiente virtual.

Para o outro desenvolvedor saber quais são e poder instalar as bibliotecas necessárias para o projeto, outro arquivo é enviado contendo o nome e a respectiva versão da biblioteca. O comando para gerar esse arquivo utilizando o gerenciador de pacotes Pip é este:

pip freeze > requirements.txt

O que esse comando está fazendo é só pegar o resultado do pip freeze e salvar no arquivo de texto. E na hora que for utilizar este projeto, basta utilizar o comando de instalação das bibliotecas referenciando o arquivo:

pip install -r requirements.txt

Bibliotecas mais utilizadas do Python

- Pandas: é usada para trabalhar com dataframes, lendo e escrevendo em arquivos csv e excel por exemplo.

- Numpy: ajuda principalmente na performance do código, possui funções para trabalhar com arrays, álgebra linear e matizes.

- Matplotlib: possui a função de criar diferentes tipos de gráficos, interativos, em duas ou três dimensões, visualizar imagens, etc.

- TensorFlow: é uma biblioteca de aprendizado de máquina voltada para a criação de redes neurais, com o objetivo de achar correlações entre dados.

- Selenium: utilizada tanto para fazer o famoso webscraping, que é a captura de dados na internet, quanto para testes automatizados.

- Scikit-learn: biblioteca de aprendizado de máquina de código aberto com funções para classificação, regressão e agrupamento, dentre diversas outras.

- NLTK: significa natural language toolkit (kit de ferramentas de linguagem natural), é utilizada mais para uma parte de inteligência artificial voltada para processamento de linguagem natural, que são as linguagens que nós falamos, o português, inglês, etc.

- Pillow: é uma extensão da biblioteca PIL, utilizada para manipular imagens, providenciando funcionalidades parecidas àquelas encontradas em softwares como o photoshop.

- OpenCV: é uma biblioteca que permite trabalhar na área de visão computacional, sendo muito utilizada para o reconhecimento facial e de objetos.

Framework ou biblioteca: qual é a diferença?

Para concluirmos, vale esclarecer uma dúvida frequente que surge; qual é a diferença entre um framework e uma biblioteca? Geralmente estes termos são utilizados no mesmo contexto, mas não são a mesma coisa. De forma simplificada, uma biblioteca é só um código que você importa e utiliza em certas partes dentro do seu próprio código, enquanto o framework é algo mais abrangente. É uma plataforma onde você vai desenvolver a partir dela. Apesar de ter uma  estrutura mais complexa, é possível contar com as suas próprias bibliotecas, sistema de testes e comandos no terminal para acelerar o fluxo de trabalho. Alguns exemplos de frameworks são: o Django, NextJS, Angular, Vue, Laravel e Flutter.

Se tiver qualquer dúvida sobre a estrutura das pastas e arquivos no exercício que desenvolvemos neste artigo, acesse o repositório no GitHub para mais informações.

Gostou do conteúdo? Se inscreva no nosso blog para mais notícias sobre tecnologia, dicas de carreira, tutoriais e muito mais!


⚠️
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.