Como construir seu primeiro pacote Python

Como construir seu primeiro pacote Python

27 de October, 2020 0 By António César de Andrade


Há alguns meses, decidi lançar Caer, um pacote de visão de computador disponível em Python. Achei o processo extremamente doloroso. Você provavelmente pode adivinhar o porquê – pouca (e confusa) documentação, falta de bons tutoriais e assim por diante.

Portanto, decidi escrever este artigo na esperança de que ajude as pessoas que estão lutando para fazer isso. Vamos construir um módulo muito simples e torná-lo disponível para qualquer pessoa em todo o mundo.

O conteúdo deste módulo segue uma estrutura muito básica. Existem, no total, quatro arquivos Python, cada um dos quais com um único método. Vamos manter isso bem simples por enquanto.

base-verysimplemodule  --> Base
└── verysimplemodule   --> Actual Module
    ├── extras
    │   ├── multiply.py
    │   ├── divide.py
    ├── add.py
    ├── subtract.py

Você notará que tenho uma pasta chamada verysimplemodule que, por sua vez, tem dois arquivos Python add.py e subtract.py. Também existe uma pasta chamada extras (que contém multiply.py e divide.py) Esta pasta formará a base de nosso módulo Python.

Trazendo o __init__s

Algo que você sempre encontrará em cada O pacote Python é um __init__.py Arquivo. Este arquivo dirá ao Python para tratar os diretórios como módulos (ou submódulos).

Muito simplesmente, ele conterá os nomes de todos os métodos em todos os arquivos Python que estão em seu diretório imediato.

Um típico __init__.py arquivo tem o seguinte formato:

from file import method 

# 'method' is a function that is present in a file called 'file.py'

Ao construir pacotes em Python, você deve adicionar um __init__.py arquivo em cada subdiretório em seu pacote. Esses subdiretórios são os sub-módulos do seu pacote.

Para nosso caso, adicionaremos nossos arquivos __init__.py ao diretório ‘módulo real’ verysimplemodule, como isso:

from add import add
from subtract import subtract

e vamos fazer o mesmo para o extras pasta, assim:

from multiply import multiply
from divide import divide

Feito isso, estamos praticamente na metade do processo!

Como configurar setup.py

Dentro do base-verysimplemodule pasta (e no mesmo diretório do nosso módulo verysimplemodule ), precisamos adicionar um setup.py Arquivo. Este arquivo é essencial se você pretende Construir o módulo real em questão.

Nota: Sinta-se à vontade para nomear o setup.py arquivo como você deseja. Este arquivo não é específico do nome, pois nosso __init__.py arquivo é.

As opções de nome possíveis são setup_my_very_awesome_python_package.py e python_package_setup.py , mas geralmente é uma prática recomendada seguir setup.py.

o setup.py arquivo conterá informações sobre o seu pacote, especificamente o nome do pacote, é versão, dependências de plataforma e muito mais.

Para nossos propósitos, não vamos exigir metainformações avançadas, então o código a seguir deve se adequar à maioria dos pacotes que você constrói:

from setuptools import setup, find_packages

VERSION = '0.0.1' 
DESCRIPTION = 'My first Python package'
LONG_DESCRIPTION = 'My first Python package with a slightly longer description'

# Setting up
setup(
       # the name must match the folder name 'verysimplemodule'
        name="verysimplemodule", 
        version=VERSION,
        author="Jason Dsouza",
        author_email="<youremail@email.com>",
        description=DESCRIPTION,
        long_description=LONG_DESCRIPTION,
        packages=find_packages(),
        install_requires=[], # add any additional packages that 
        # needs to be installed along with your package. Eg: 'caer'
        
        keywords=['python', 'first package'],
        classifiers= [
            "Development Status :: 3 - Alpha",
            "Intended Audience :: Education",
            "Programming Language :: Python :: 2",
            "Programming Language :: Python :: 3",
            "Operating System :: MacOS :: MacOS X",
            "Operating System :: Microsoft :: Windows",
        ]
)

Feito isso, tudo o que temos que fazer a seguir é executar o seguinte comando no mesmo diretório que base-verysimplemodule:

python setup.py sdist bdist_wheel

Isso criará todos os pacotes necessários que o Python exigirá. o sdist e bdist_wheel os comandos criarão uma distribuição de código-fonte e uma roda que você pode carregar posteriormente no PyPi.

PyPi – aqui vamos nós!

PyPi é o repositório oficial do Python onde todos os pacotes do Python são armazenados. Você pode pensar nisso como o Github para pacotes Python.

Para tornar seu pacote Python disponível para pessoas ao redor do mundo, você precisa ter um conta com PyPi.

Feito isso, estamos prontos para carregar nosso pacote no PyPi. Lembre-se da distribuição de origem e da roda que foram construídas quando executamos python setup.py ? Bem, isso é o que realmente será enviado ao PyPi.

Mas antes de fazer isso, você precisa instalar twine se você ainda não o instalou. É tão simples quanto pip install twine.

Como fazer upload de seu pacote para PyPi

Supondo que você tenha twine instalado, vá em frente e execute:

twine upload dist/*

Este comando irá carregar o conteúdo do dist pasta que foi gerada automaticamente quando executamos python setup.py. Você receberá um prompt solicitando seu nome de usuário e senha PyPi, então vá em frente e digite-os.

Agora, se você seguiu este tutorial ao máximo, pode obter um erro ao longo das linhas de repositório já existe.

Isso geralmente ocorre porque há um conflito de nomes entre o nome do seu pacote e um pacote que já existe. Em outras palavras, altere o nome do seu pacote – outra pessoa já escolheu esse nome.

E é isso!

Para com orgulho pip instale seu módulo, ative um terminal e execute:

pip install <package_name> 

# in our case, this is
pip install verysimplemodule

Observe como o Python instala perfeitamente o seu pacote a partir dos binários que foram gerados anteriormente.

Abra um shell interativo Python e tente importar seu pacote:

>> import verysimplemodule as vsm

>> vsm.add(2,5)
7
>> vsm.subtract(5,4)
1

Para acessar os métodos de divisão e multiplicação (lembre-se que eles estavam em uma pasta chamada extras ?), corre:

>> import verysimplemodule as vsm

>> vsm.extras.divide(4,2)
2
>> vsm.extras.multiple(5,3)
15

É simples assim.

Parabéns! Você acabou de construir seu primeiro pacote Python. Embora seja muito simples, seu pacote agora está disponível para ser baixado por qualquer pessoa ao redor do mundo (contanto que tenham Python, é claro).

Qual é o próximo?

Teste PyPi

O pacote que usamos neste tutorial era um módulo extremamente simples – operações matemáticas básicas de adição, subtração, multiplicação e divisão. Não faz sentido enviá-los diretamente para o PyPi especialmente já que você está tentando fazer isso pela primeira vez.

Sorte nossa, existe Teste PyPi, uma instância separada do PyPi onde você pode testar e experimentar em seu pacote (você precisará se inscrever para uma conta separada na plataforma).

O processo que você segue para fazer o upload para o Test PyPi é praticamente o mesmo, com algumas pequenas alterações.

# The following command will upload the package to Test PyPi
# You will be asked to provide your Test PyPi credentials

twine upload --repository testpypi dist/*

Para baixar projetos do Test PyPi:

pip install --index-url "https://test.pypi.org/simple/<package_name>"

Meta informação avançada

A meta informação que usamos no setup.py arquivo era muito básico. Você pode adicionar informações adicionais, como vários mantenedores (se houver), e-mail do autor, informações de licença e uma série de outros dados.

Este artigo será particularmente útil se você pretende fazer isso.

Olhe para outros repositórios

Observar como outros repositórios construíram seus pacotes pode ser muito útil para você.

Ao construir Caer, Olhava constantemente para como Numpy e Soneto configurar seus pacotes. Eu recomendaria dar uma olhada em Caer’s, Numpy’s, e Tensorflow’s repositórios se você planeja construir pacotes um pouco mais avançados.



Fonte

Click to rate this post!
[Total: 0 Average: 0]