Incremental é um gerenciador de versões CalVer que oferece suporte ao futuro.
A documentação da API pode ser encontrada aqui. Segue documentação narrativa.
Conteúdo
Teoria da Operação
Início rápido
Usando ferramentas de configuração
Usando Hatchling
Usando setup.py
Inicialize o projeto
Integração de tempo de execução
Versões incrementais
Atualizando
Versões Indeterminadas
Um número de versão tem o formato YY.MM.PATCH.
Se o seu projeto for denominado "Shrubbery", seu código será encontrado em shrubbery/
ou src/shrubbery/
.
Incremental armazena o número da versão do seu projeto em {src/}shrubbery/_version.py
.
Para atualizar a versão, execute incremental update Shrubbery
, passando --rc
e/ou --patch
conforme apropriado (veja Atualização, abaixo).
Alterar a versão também atualiza quaisquer versões indeterminadas em sua base de código, como "Shrubbery NEXT", para que você possa fazer referência ao próximo lançamento na documentação. É assim que a Incremental apoia o futuro.
Adicione Incremental ao seu pyproject.toml
:
[build-system]requires = ["setuptools","incremental>=24.7.2", # ← Adicionar incremental como uma dependência de compilação]build-backend = "setuptools.build_meta"[project]name = ""dynamic = ["version"] # ← Marcar a versão dynamicdependencies = ["incremental>=24.7.2", # ← Depender de incremental em tempo de execução]# ...[tool.incremental] # ← Ativar o plugin setuptools do Incremental
Tudo bem se a tabela [tool.incremental]
estiver vazia, mas deve estar presente.
Remova qualquer [project] version =
entrada e qualquer [tool.setuptools.dynamic] version =
entrada.
Em seguida, inicialize o projeto.
Se você estiver usando o Hatchling para empacotar seu projeto, ative o plugin Hatchling do Incremental alterando seu pyproject.toml
:
[build-system]requires = ["hatchling","incremental>=24.7.2", # ← Adicionar incremental como uma dependência de compilação]build-backend = "hatchling.build"[project]name = ""dynamic = ["version"] # ← Marcar a versão dynamicdependencies = ["incremental>=24.7.2", # ← Depender de incremental em tempo de execução]# ...[tool.hatch.version]source = "incremental" # ← Ativar Plug-in Hatchling da Incremental
Incremental pode ser configurado normalmente em uma tabela opcional [tool.incremental]
.
O comando hatch version
reportará a versão gerenciada por Incremental. Use o comando incremental update
para alterar a versão (não há suporte para configurá-la com hatch version
).
Em seguida, inicialize o projeto.
setup.py
Incremental pode ser usado em setup.py
em vez de pyproject.toml
. Adicione isto à sua chamada setup()
, removendo quaisquer outros argumentos de controle de versão:
setup(use_incremental=True,setup_requires=['incremental'],install_requires=['incremental'], # juntamente com quaisquer outras dependências de instalação... }
Em seguida, inicialize o projeto.
Instale o Incremental em seu ambiente local com pipx install incremental
. Em seguida, execute incremental update
. Ele criará um arquivo em seu pacote chamado _version.py
assim:
da importação incremental Version__version__ = Version("", 24, 1, 0)__all__ = ["__version__"]
As instalações subsequentes do seu projeto usarão Incremental para controle de versão.
Você pode expor o incremental.Version
de _version.py
na API do seu pacote. Para fazer isso, adicione ao __init__.py
do seu pacote raiz:
de ._versão importar __versão__
Observação
Fornecer um atributo __version__
está saindo de moda após a introdução de importlib.metadata.version() no Python 3.6, que pode recuperar a versão de um pacote instalado.
Se você não expor esse objeto publicamente, nem utilizá-lo em seu pacote, não haverá necessidade de depender do Incremental em tempo de execução. Você pode removê-lo da matriz de dependencies
do seu projeto (ou, em setup.py
, de install_requires
).
incremental.Version
é uma classe que representa uma versão de um determinado projeto. É composto pelos seguintes elementos (que são fornecidos durante a instanciação):
package
(obrigatório), o nome do pacote que esta Version
representa.
major
, minor
, micro
(todos obrigatórios), o XYZ da Version
do seu projeto.
release_candidate
(opcional), definido como 0 ou superior para marcar esta Version
como candidata a lançamento (às vezes também chamada de "pré-lançamento").
post
(opcional), defina como 0 ou superior para marcar esta Version
como pós-lançamento.
dev
(opcional), defina como 0 ou superior para marcar esta Version
como uma versão de desenvolvimento.
Você pode extrair uma string de versão compatível com PEP-440 usando o método .public()
, que retorna uma str
contendo a versão completa. Esta é a versão que você deve fornecer aos usuários ou usar publicamente. Um exemplo de saída seria "13.2.0"
, "17.1.2dev1"
ou "18.8.0rc2"
.
Chamar repr()
com uma Version
fornecerá uma representação do código-fonte Python dele, e chamar str()
em uma Version
produz uma string como '[Incremental, version 16.10.1]'
.
Incremental inclui uma ferramenta para automatizar a atualização da versão do seu projeto que usa Incremental, chamada incremental
. Ele atualiza o arquivo _version.py
e atualiza automaticamente alguns usos de versões incrementais de uma versão indeterminada para a atual. Requer click
do PyPI.
incremental update
realizará atualizações nesse pacote. Os comandos que podem ser dados depois determinam qual será a próxima versão.
--newversion=
, para definir a versão do projeto para uma versão totalmente especificada (como 1.2.3 ou 17.1.0dev1).
--rc
, para definir a versão do projeto como
se a versão atual não for uma candidata a lançamento, ou aumentar o número da candidata a lançamento em 1, se for.
--dev
, para definir o número da versão de desenvolvimento do projeto como 0, se não for uma versão de desenvolvimento, ou aumentar o número da versão de desenvolvimento em 1, se for.
--patch
, para incrementar o número do patch da versão. Isso também redefinirá o número do release candidate, passando --rc
ao mesmo tempo para incrementar o número do patch e torná-lo um release candidate.
--post
, para definir o número de pós-lançamento do projeto como 0, se não for um pós-lançamento, ou aumentar o número de pós-lançamento em 1, se for. Isso também redefinirá o candidato a lançamento e os números de lançamento de desenvolvimento.
Se você não fornecer argumentos, o número do release candidate será removido, tornando-o um "lançamento completo".
Incremental suporta versões "indeterminadas", como substituto para a próxima versão "completa". Isto pode ser usado quando a versão que será exibida ao usuário final é desconhecida (por exemplo, "introduzida em" ou "obsoleta em"). Incremental oferece suporte às seguintes versões indeterminadas:
Version("
Quando você executa incremental update
, eles serão atualizados para versões reais (assumindo que a versão final de destino seja 17.1.0):
Version("
Assim que a versão final for feita, ela se tornará:
Version("