Procedimentos criação pacotes Python
- #Python
Diferenças entre Módulo e Pacote
Um módulo é um arquivo (.py) contendo código Python que pode ser importado e reutilizado em outros programas. Por outro lado, um pacote é um conjunto de módulos organizados em pastas contendo um arquivo init.py, o qual identifica que o diretório como um pacote Python.
Quais vantagens de modularização e criação de pacotes?
A modularização oferece:
- Legibilidade: Código claro e dividido em partes menores.
- Manutenção: Facilita a atualização e correção.
- Reaproveitamento de Código: É possível reutilizar módulos em diferentes projetos.
Criação de pacotes permite:
- Facilidade de Compartilhamento: Os pacotes podem ser publicados em ambientes como PyPI, assim facilita o uso por outros desenvolvedores.
- Instalação Simplificada: A instalação é simples por meio de ferramentas como o pip.
Conceitos Básicos
- PyPI: Repositório público oficial para publicação e distribuição de pacotes Python.
- Wheel e Sdist: Tipos de distribuições criadas para publicar pacotes com extensão (.whl e *.tar.gz).*
- Setuptools: Ferramenta para criar distribuições, a qual é definida no arquivo setup.py.
- Twine: Utilitário para upload de pacotes no PyPI.
Estrutura do projeto
O projeto pode ter uma estrutura simples ou com vários módulos como segue abaixo:
Estrutura Simples:
new_projeto/
├── setup.py
├── README.md
├── requirements.txt
└── new_pacote/
├── __init__.py
└── modulo.py
Estrutura com Múltiplos Módulos:
new_projeto/
├── setup.py
├── README.md
├── requirements.txt
└── new_pacote/
├── __init__.py
├── modulo1/
│ ├── __init__.py
│ └── arquivo1.py
└── modulo2/
├── __init__.py
└── arquivo2.py
Cada arquivo realiza uma função específica:
- setup.py: Define as configurações do pacote como nome do pacote, versão, informações do autor e GIT que contém o projeto.
- README.md: Documentação básica com instruções de instalação e utilização.
- requirements.txt: Arquivo que contém as dependências do pacote.
- init.py: Indica que o diretório é um pacote Python.
Distribuições
É necessário criar uma distribuição binária ou de código-fonte (como um arquivo .tar.gz) para publicar um pacote. O pip normalmente instala a versão binária, mas utiliza o código-fonte apenas se necessário.
Gerando Distribuições
No diretório raiz do projeto, faz-se necessário instalar pacotes dependentes:
python -m pip install --upgrade pip
python -m pip install --user twine
python -m pip install --user setuptools
python -m pip install wheel
Após isso, será possível gerar as distribuições (wheel e sdist):
python [setup.py](<http://setup.py/>) sdist bdist_wheel
Publicando no Test PyPI
- Crie uma conta no [Test PyPI](<https://test.pypi.org/account/register/>).
- Ative a autenticação de dois fatores (2FA) para maior segurança.
- Criar API token para utilização do Twine.
- Publique o pacote com o Twine:
python -m twine upload --repository-url <https://test.pypi.org/legacy/> dist/*
Publicando no PyPI
- Certifique-se de que o pacote foi testado no Test PyPI.
- Crie uma conta no <https://pypi.org/account/register/>
- Publique o pacote com o Twine:
python -m twine upload --repository-url <https://upload.pypi.org/legacy/> dist/*
Instalando o Pacote
Test PyPI
pip install -i <https://test.pypi.org/simple/new_pacote>
PyPI
pip install new_pacote