🤔 Para Refletir :
"A verdadeira ideia criativa vem do momento mais simplório do dia."
- Yonori Akari

Python - Criando um updater, parte 3

HermesPasser Masculino

Duque
Membro
Membro
Vícios e amores servem para preencher o vazio
Juntou-se
23 de Março de 2017
Postagens
836
Bravecoins
92
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.



Parte I • Parte II • Parte III
 
Interessante, mesmo já tendo mexido com o python eu não sabia dessa parte de criar packages e do PyPi. Não farei os exercícios pois tenho coisas para codar pra facul, mas boa sorte pra quem fizer.

Ótima iniciativa Passarinho.
 
passando aqui só pra deixar aquele coração, uashuashauhsaushasha
 
Eranot comentou:
Interessante, mesmo já tendo mexido com o python eu não sabia dessa parte de criar packages e do PyPi. Não farei os exercícios pois tenho coisas para codar pra facul, mas boa sorte pra quem fizer.

Ótima iniciativa Passarinho.

Obrigado. Se eu achar mais coisas legais para fazer dou uma postada.

Cross Maker comentou:
passando aqui só pra deixar aquele coração, uashuashauhsaushasha

Valeu o/
 
Voltar
Topo Inferior