Como publicar seu pacote no pypi
Preparando o ambiente
Seu pacote no Github
Não é obrigatório, mas é recomendado que você tenha um repositório no Github para o seu pacote. Isso facilita a vida de quem quer contribuir com o seu projeto, e também permite crie uma página para o seu pacote, com instruções de instalação, documentação, etc. Além de criar um workflow para atualizar o pacote no pypi automaticamente quando você fizer um push para o repositório.
Instalando o setuptools, twine e wheel
Os pacotes setuptools, twine e wheel são necessários para criar e publicar o seu pacote.
- setuptools: É um pacote que permite que você crie pacotes python.
- twine: É um pacote que permite que você publique pacotes python no pypi.
- wheel: É um pacote que permite que você crie pacotes python que podem ser instalados em qualquer sistema operacional.
Para instalar, basta executar os comandos abaixo:
pip install setuptools twine wheel
Arquivo setup.py
Para criar o pacote, você precisa criar um arquivo setup.py
na raiz do seu projeto. Esse arquivo deve conter as informações do seu pacote, como nome, versão, descrição, etc. Abaixo um exemplo de setup.py
:
from setuptools import setup, find_packages
setup(
name='seupacote',
packages=find_packages(),
version='1.0.0',
description='Uma descrição do seu pacote',
long_description=open('README.md').read(),
long_description_content_type="text/markdown",
author='Guilherme Saldanha',
author_email='[email protected]',
url='https://github.com/guisaldanha/dialoger',
license='MIT',
keywords=['dev', 'web'],
classifiers=[
'Intended Audience :: Developers',
'License :: Freely Distributable',
'Operating System :: Microsoft :: Windows',
'Operating System :: Unix',
'Programming Language :: Python :: 3.11',
'Topic :: Communications',
'Topic :: Utilities',
],
'package_data': {
'seupacote': ['data/*.dat'],
}
)
Criando o pacote
Para criar o pacote, basta executar o comando abaixo:
py setup.py sdist bdist_wheel
Esse comando vai criar uma pasta dist
na raiz do seu projeto, com o seu pacote. Dentro dessa pasta, você vai encontrar dois arquivos, um com a extensão .tar.gz
e outro com a extensão .whl
. O arquivo .tar.gz
é o seu pacote, e o arquivo .whl
é um pacote que pode ser instalado em qualquer sistema operacional.
Publicando o pacote
Para publicar o pacote, você precisa criar uma conta no pypi. Depois de criar a conta e ter seu pacote pronto, basta executar o comando abaixo:
twine upload dist/*
Ao executar esse comando será solicitado o seu usuário e senha do pypi. Depois de informar os dados, o seu pacote será publicado no pypi.
Instalando o pacote
Para instalar o pacote, basta executar o comando abaixo:
pip install seupacote
Atualizando o pacote
Para atualizar o pacote, basta alterar a versão no arquivo setup.py
e executar os comandos abaixo:
py setup.py sdist bdist_wheel
twine upload dist/*
Automatizando o processo
Para automatizar o processo de atualização do pacote e criação de release a partir das tags, você pode criar um workflow no Github. Para isso, basta criar um arquivo .github/workflows/pypi.yml
no seu repositório, com o conteúdo abaixo:
Para que o workflow funcione é ncessário que você crie um token no pypi, e adicione esse token como secret no seu repositório, com o nome PYPI_TOKEN
. Para criar o token, basta acessar o pypi, fazer login, e acessar a página https://pypi.org/manage/account/token/.
Você pode informar os chaves secrets em Settings / Secrets and variables / Actions.
O workflow é dividido em duas partes, a primeira parte é responsável por criar o release a partir da tag, e a segunda parte é responsável por publicar o pacote no pypi.
on:
push:
tags:
- '*'
name: Create Release From Tags
jobs:
build:
name: Create Release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Create Release
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with:
tag_name: ${{ github.ref }}
release_name: ${{ github.ref }}
body: |
To see the changes in this version, see the CHANGELOG.md file.
draft: false
prerelease: false
publish:
name: Publish Release on PyPI
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Set up Python 3.11
uses: actions/setup-python@v1
with:
python-version: 3.11
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
pip install setuptools wheel twine
- name: Build and publish
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
run: |
python3 setup.py sdist bdist_wheel
twine upload dist/*