Advertisement
  1. Code
  2. Python

Como Escrever, Empacotar e Distribuir uma Biblioteca em Python

by
Difficulty:IntermediateLength:MediumLanguages:

Portuguese (Português) translation by André (you can also view the original English article)

Python é uma ótima linguagem de programação, mas empacotamento é um dos seus pontos fracos. Esse é um fato já conhecido pela comunidade. A instalação, importação, uso e criação de pacotes melhorou muito ao longo dos anos, mas ainda não está no mesmo nível que novas linguagens de programação como Go e Rust que aprenderam muito com as batalhas do Python e de outras linguagens mais maduras.

Nesse tutorial, nós vamos aprender tudo que você precisa saber para escrever, empacotar e distribuir seus próprios pacotes.

Como Escrever uma Biblioteca em Python

Uma biblioteca Python é uma coleção coerente de módulos Python que são organizados como um pacote Python. No geral, isso significa que todos os módulos vivem dentro do mesmo diretório e que esse diretório está armazenado em um dos caminhos de busca que o Python realiza para carregá-lo.

Vamos, rapidamente, escrever um pacote em Python 3 para ilustrar todos esses conceitos.

O Pacote "Pathology"

Python 3 tem um excelente objeto Path, que é uma melhora incrível sobre as fraquezas que o módulo os.path no Python 2 apresentava. Mas ainda falta uma funcionalidade crucial - encontrar o caminho o script atual. Isso é muito importante quando você quer localizar arquivos de acesso relativos ao script que você está editando.

Em muitos casos, o script pode ser instalado em qualquer local, então você não pode utilizar caminhos absolutos, e o diretório de trabalho pode ser configurado para qualquer valor, e por isso você não pode utilizar caminhos relativos. Se você quiser acessar um arquivo em um sub-diretório ou em um diretório-pai, você precisa descobrir onde o script está localizado.

Aqui está como você pode fazer isso em Python:

Para acessar o arquivo chamado 'file.txt' que está localizado em um sub-diretório de onde o script está, chamado de 'data', você pode utilizar a seguinte linha de código: print(open(str(script_dir/'data/file.txt').read())

Com o pacote pathology, você tem um método script_dir, e pode utilizá-lo da seguinte forma:

Sim, é bem fácil. O pacote 'pathology' é muito simples. Ele chama a própria classe Path - a partir do módulo pathlib, e adiciona uma método estático script_dir() que sempre retorna o caminho do script considerado.

Aqui está a implementação:

Devido à implementação multi-plataforma da pathlib.Path, você pode derivar a sua implementação diretamente dela a partir de uma sub-classe específica (PosixPath ou WindowsPath). A resolução do diretório do script usa o módulo 'inspect' para descobir o nome do arquivo.

Testando o Pacote "Pathology"

Sempre que você escrever algo mais complexo, você deve testá-lo. O módulo pathology não é exceção. Aqui está os testes utilizando o framework padrão para testes unitários:

O Caminho Python

Pacotes Python devem ser instalados em algum lugar que faça parte do caminho de busca que o Python realiza para carregar novos módulos. Essa lista de caminhos é uma lista de diretórios e está disponível em sys.path. Aqui está o meu atual sys.path:

Note que a primeira linha vazia representa o diretório atual, então você pode sempre importar módulos que estão no diretório atual de trabalho. Além disso você pode adicionar ou remover diretórios do sys.path.

Você também pode definir uma variável de ambiente PYTHONPATH, e existem alguns modos de controlá-la. O site-packages está incluso por padrão, e pra lá que vão os pacotes que você instala utilizando o PIP.

Como Empacotar uma Biblioteca em Python

Agora que você tem seu código testado, vamos empacotar isso tudo em uma biblioteca. Python provê um jeito fácil de fazer isso via o módulo setup. Você cria um arquivo chamado setup.py no diretório raiz do seu pacote. Então, para criar um código de distribuição, você roda: python setup.py sdist

Para criar um arquivo binário chamado de 'wheel', você roda: python setup.py bdist_wheel

Aqui está o arquivo setup.py da nossa biblioteca pathology:

Ele inclui algumas informações em adição ao item 'packages' que usa a função find_packages() importada do setuptools para encontrar sub-pacotes.

Vamos construir uma fonte de distribuição:

O aviso (em inglês: 'warning') é porque eu utilizei um arquivo README.md não padrão. O resultado é um arquivo tar-gzipped dentro do diretório de distribuição:

E aqui está uma distribuição binária:

O pacote pathology contém só módulos puramente escritos em Python, então um pacote universal pode ser construído. Se o seu pacote inclui arquivos em C, você vai ter que construir um 'wheel' separada para cada plataforma:

Para um mergulho mais profundo no assunto de empacotamento de bibliotecas Python, confira Como Escrever Seus Próprios Pacotes em Python.

Como Distribuir um Pacote Python

Python tem uma central de repositórios chamada PyPI (Python Packages Index). Quando você instala um pacote utilizando PIP, ele irá baixar o pacote do PyPI (a menos que você determine um repositório diferente). Para distribuir nosso pacote, nós precisamos fazer o upload dele para o PyPI e prover algumas informações extras. Os passos são:

  • Criar uma conta no PyPI (somente uma).
  • Registrar seu pacote.
  • Fazer o upload do seu pacote.

Criar uma Conta

Você pode criar uma conta no website do PyPI. Então, crie um arquivo .pypirc no seu diretório inicial.

A título de teste, você pode adicionar um "'pypitext' index server" no seu arquivo .pypirc:

Registrar seu Pacote

Se essa é a primeira versão do seu pacote, você precisa registrá-lo dentro do PyPI. Use o comando de registro do setup.py. Ele vai pedir por sua senha. Note que eu o apontei para o repositório de teste aqui:

Fazer o Upload do seu Pacote

Agora que o seu pacote está registrado, nós podemos fazer o upload dele. Eu recomendo usar o twine, que é mais seguro. Instale-o usualmente através do pip install twine. Então, faça o upload do seu pacote utilizando o twine e fornecendo a sua senha:

Para um mergulho mais profundo nesse tópico de distruição de pacotes, confira Como Compartilhar seus Pacotes Python.

Conclusão

Nesse tutorial, nós passamos por todo o processo de escrever uma biblioteca Python, empacotá-la, e distribuí-la no PyPI. Nesse ponto, você deve ter todas as ferramentas necessárias para escrever e compartilhar suas bibliotecas com o mundo.

Em adição, não se hesite em conferir o que nós temos disponível para venda e estudo no nosso maketplace, e por favor, envie qualquer dúvida e dê seu feedback utilizando a seção abaixo.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.