Vícios e amores servem para preencher o vazio
Introdução
E cá estamos na última parte \o/. Espero que isso tenha ajudado você a entender melhor como o Python funciona, pois me ajudou. Sem mais delongas:4º Passo - Package
Agora vamos transformar esse projeto em um package para que ele possa ver usado por outros projetos. Primeiro renomeie o arquivo main para o nome que queres para seu projeto (pois não faz sentido alguém importar o main), o eu será ventura. Depois adicione o nome do projeto (o da pasta) antes do nome de cada importação que fizemos de nossos arquivos. Isso será necessário para que eles possam ser importados mesmo que o caminho onde o programa está rodando é outro. Também remova o import do sys pois não usaremos mais argumentos de linha de comando.
Outra coisa que faremos é adicionar "_" no nome de cada arquivo exceto o mais para que o usuário saiba que esses arquivos não foram projetados para serem usados por eles.
Note que a importação do _hxml não tem "ventura." pois nesse caso só um ponto basta.
ventura.py (antigo main.py)
Código:
from ._hxml import VenturaXML
import ventura._hzip as hzip
import ventura._hweb as hweb
import ventura._hpath as hpath
_hpath.py (antigo hpath.py)
Código:
import ventura._hpath as hpath
Agora crie um arquivo chamado __init__.py, este arquivo não precisa conter nada dentro, ele serve para que o diretório seja considerado um package.
Parabéns! Você criou um package, tente adicionar a pasta dele em seu projeto e importa-lo em um arquivo seu (exemplo: import ventura).
5º Passo - Publicação
Agora prepararemos para que este package possa ser publicado PyPI, o lugar onde armazena-se packages para que sejam baixados. Mas especificamente publicaremos no Test PyPI, subdomínio para testes. Eu me basearei neste tutorial.
Crie uma subpasta com o nome do projeto e mova todos os arquivos para lá, mas fique na pasta onde está pois nela que criaremos os próximos arquivos que precisamos para publicar o projeto.
Aqueles acostumados com git entenderão bem o que faremos em seguida: crie README.md, LICENSE (arquivo sem extensão) e .gigignore (arquivo sem o nome). No README escreva uma descrição do projeto (aprenda aqui), em LICENSE, a licença (que no meu caso usei a MIT, ela é só um arquivo de texto normal), o gitignore é onde você escreverá todas as pastas e arquivos que serão ignorados na hora de subir o projeto para o repositório (saiba como).
O próximo arquivo que criaremos é o setup.py, este é o responsável por armazenar informações do projeto. Abaixo deixarei um modelo (que não tem todas as informações possíveis mas tem as essenciais).
Código:
from setuptools import setup
# o método que será chamado pelo "empacotador"
setup(
# nome do pacote
name = 'ventura',
# versão do pacote
version = '0.1',
# uma descrição, existe um descrição mais completa que podemos fazer em formato
#markdown usando o texto do README mas não usaremos
description = 'Simple xml-based updater in python 3.6 with no try-catch statement',
# link do projeto, geralmente o repositório do projeto.
url = 'http://github.com/hermespasser/ventura',
# nome do autor
author = 'Hermes Passer',
# email do autor
author_email = 'hermespasser@gmail.com',
# a licença escolhida para o projeto
license = 'MIT',
# os pacotes inseridos, ou coloque o mesmo valor que colocou em name ou você pode
# procurar dinamicamente importando o find_packages() do setuptools
packages = ['ventura']
)
Agora vamos iniciar o processo de criar a distribuição e enviar. Rode python -m pip install --user --upgrade setuptools wheel só para ter certeza que o setuptools e wheel estão instalados e devidamente atualizados.
Agora vamos efetivamente criar a distribuição, para isso devemos está na mesma pasta que o setup.py está instalado. Rode python setup.py sdist bdist_wheel e será criada a pasta dist, que são os arquivos que serão enviados.
Para subir o package para o Test PyPI precisaremos criar uma conta lá, clique aqui para fazer isso. Depois precisaremos baixar e atualizar o twine, um utilitário que simplifica o processo de envio: python -m pip install --user --upgrade twine.
Note: o twine ficará referenciado no PATH do sistema então precisaremos escrever todo o caminho até ele quando fomos usa-lo. Ele fica em c:\users\nome do usuário\appdata\local\programs\python\python36\Scripts.
Rode c:\users\nome do usuário\appdata\local\programs\python\python36\Scripts\twine upload --repository-url https://test.pypi.org/legacy/ dist/* para que o package seja subido para o PyPI, você precisará digitar o seu usuário e senha.
\o/ congrats \o/
Seu package está disponível para download, se você quiser baixa-lo para testar use python -m pip install --index-url https://test.pypi.org/simple/ projeto
Note que que o Test PyPI é para testes e por isso não é incomum que packages e contas sejam deletadas nele, se quer que seu projeto fique permanentemente online então precisará subir para o PyPI normal. Para isso você precisará registrar-se nele e omitir o --repository-url https://test.pypi.org/legacy/ no twine que fez anteriormente para subir o package e --index-url https://test.pypi.org/simple/ no comando pip anteriormente feito para baixar o package.
Aftermath & Exercícios
Parabéns por ter chegado até aqui! Qualquer dúvida é só perguntas nos comentários que tentarei responder.
Deixarei aqui os links para o projeto, no PyPI e GitHub. Você pode baixa-lo usando o comando pip install ventura
Agora deixarei alguns exercícios para você tentar em casa:
- Diminuir os efeitos colaterais do projeto usando blocos try-except (diga: retorne falso no update_if_is_need se alguma função vital não está funcionando, como no caso de faltar internet)
- O usuário pode estar versões atrás da atual, então crie um sistema que execute todas as atualizações na frente da sua.
Bem é isso, até a próxima. Talvez eu faça um vídeo com isso em funcionamento depois.