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:
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:
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:
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:
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:
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:
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__”:
Se tivéssemos outros módulos, bastava adicionar na lista. Agora podemos utilizar a seguinte notação para trabalhar com esse módulo:
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:
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:
Para ativá-lo no Windows, digite o seguinte comando:
Já se estiver utilizando o Linux, o comando é o seguinte:
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:
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:
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!
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.