PYPI: Empacotando e distribuindo a sua aplicação Python
26 de jun. de 2019
Esses dias estava fazendo um workshop em Python e um dos tópicos, era como empacotar e distribuir uma aplicação ou biblioteca em Python, ou seja como eu posso fazer um:
pip install minha_aplicaçãoE qualquer pessoa pode usa-la. Então vamos lá. Primeiro passo é criar o nosso script:
script/ automation.pyEntão dentro de uma pasta chamada script eu criei um arquivo python com nome automation.py. O conteúdo dele é o seguinte:
#!/usr/bin/python3
print("it's working!")
Agora que já temos o nosso script, é necessário instalar 3 módulos do python para poder distribui-lo.
python3 -m pip install twine setuptools wheelO setuptools é o que vai criar os pacotes a serem distribuidos. O Wheel é o formato desse pacote. E o Twine é pra fazer o upload desses pacotes para o repositórios. Agora crie um arquivo chamado setup.py no mesmo diretório com o seguinte conteúdo. setup.py
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name='alisson_cli',
version='0.1',
scripts=['automation.py'] ,
author="Alisson Machado",
author_email="alisson.machado@gmail.com",
description="pacote criado para demonstrar o pypi",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/AlissonMMenezes/alisson_cli",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
Nele temos uma série de informações, como versão, repositório, descrição, mas o mais interessante pra esse post é o scripts, nele é informado o arquivo executável da nossa aplicação, esse arquivo tem que ser um script valido dentro do diretório, que nesse caso é o automation.py.
Agora vamos criar um README.md:
Esse é um projeto testeCom tudo pronto agora, vamos gerar o pacote a ser distribuído com o seguinte comando:
python3 setup.py sdist bdist_wheelsdist - Source Distribuition bdist_wheel - Built Distribuition Assim que terminar o comando será criado um diretório chamado dist, com o conteúdo:
alisson@alisson-dell:~/workshop/dia1/scripts$ ls dist/ alissonteste-0.1-py3-none-any.whl alissonteste-0.1.tar.gzVeja que temos um whl e o tar.gz que é o código fonte do nosso projeto, gerado pelo parâmetro sdist. Agora crie uma conta em: https://pypi.org/account/register/ Já com o seu cadastro finalizado e verificado execute o seguinte comando:
alisson@alisson-dell:~/workshop/dia1/scripts$ python3 -m twine upload dist/* Enter your username: alisson.machado Enter your password: Uploading distributions to https://upload.pypi.org/legacy/ Uploading alisson_cli-0.1-py3-none-any.whl 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4.49k/4.49k [00:00<00:00, 5.88kB/s] Uploading alisson_cli-0.1.tar.gz 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4.07k/4.07k [00:01<00:00, 2.95kB/s]Veja que o upload foi feito com sucesso. Agora para testar vamos executar o seguinte comando:
sudo python3 -m pip install alisson_cli WARNING: The directory '/home/alisson/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. WARNING: The directory '/home/alisson/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. Collecting alisson_cli Downloading https://files.pythonhosted.org/packages/74/e1/8822f9b700105a7209159cc036c70814ad5f19cc0ef9ade1351e156eea1c/alisson_cli-0.1-py3-none-any.whl Installing collected packages: alisson-cli Successfully installed alisson-cli-0.1veja que o pacote já está disponível e já foi instalado na minha máquina. Para testar agora é só digitar o comando abaixo em qualquer diretório:
alisson@alisson-dell:~$ automation.py it's working!E ai foi instalado o nosso script. Qualquer dúvida é só dar um salve.