Módulos

Módulo: objeto que serve como unidade organizacional do código que é carregado pelo comando de import.

Vantagens da modularização:

  • Legibilidade
  • Manutenção
  • Reaproveitamento de código

Pacotes

Pacote: coleção de módulos com hierarquia.

Vantagens de criar um pacote:

  • Facilidade de compartilhamento
  • Facilidade de instalação

Conceitos

  • Pypi: repositório público oficial de pacotes
  • Wheel e Sdist: dois tipos de distribuições
  • Setuptools: pacote usado em setup.py para gerar as distribuições
  • Twine: pacote usado para subir as distribuições no repositório Pypi

Estruturas

Módulo simples:

└── project_name/
    ├── README.md
    ├── setup.py
    ├── requirements.txt
    └── package_name/
        ├── __init__.py
        ├── file1_name.py
        ├── file2_name.py

Exemplos de chamada para o pacote simples:

  • import package_name.file1_name
  • from package_name import file1_name

Vários módulos:

└── project_name/
    ├── README.md
    ├── setup.py
    ├── requirements.txt
    └── package_name/
        ├── __init__.py
        ├── module1_name/
            ├── file1_name.py
            ├── file2_name.py
        ├── module2_name/
            ├── file1_name.py
            ├── file2_name.py

Exemplos de chamada para o pacote com vários módulos:

  • import package_name.module1_name.file1_name
  • from package_name.module1_name import file1_name

Passos para criar um projeto

  • Fork do template
  • Adição do conteúdo dos módulos do projeto
  • Edição do arquivo setup.py
  • Edição do requirements.txt
  • Edição do README.md

Exemplo:

image-processing-package/
    README.md
    setup.py
    requirements.txt
    image_processing/
        __init__.py
        processing/
            __init__.py
            combination.py
            transformation.py
        utils/
            __init__.py
            to.py
            plot.py
  • setup.py: Usado para especificar como o pacote deve ser construído.
  • requeriments.txt: Usado para passar as dependências que devem ser instaladas com o seu pacote. Opcionalmente, podem ser especificadas as versões.
  • README.md: Será exibido como documentação na página do Pypi do seu pacote. Foi usado markdown.

Comandos de instalação

python -m pip install --upgrade pip
python -m pip install --user twine
python -m pip install --user setuptools

Comandos para criar distribuições:

python setup.py sdist bdist_wheel

Publicando o pacote

Passos necessários:

Passos para subir o pacote:

  • Criar conta no Test Pypi
  • Publicar no Test Pypi
  • Instalar pacote usando Test Pypi
  • Testar pacote
  • Criar conta no Pypi
  • Publicar no Pypi
  • Instalar pacote usando Pypi

Comando para publicar no Test Pypi:

python -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*

Comando para instalar o pacote de teste:

pip install –-index-url https://test.pypi.org/simple/ image-processing

Comando para publicar no Pypi:

python -m twine upload --repository-url https://upload.pypi.org/legacy/ dist/*

Comando para instalar o pacote:

python -m pip install package_name

Referências