Ferramentas de desenvolvimento

teste de versão PEP 440Entenda a ordem e a seleção de versões Python

Uma versão por linha: normalize, ordene ou confira condições separadas por vírgulas.

teste de versão PEP 440

Versões (uma por linha)

Relatório

Insira dados ou carregue um exemplo.

A entrada é processada neste navegador e não é enviada a um servidor.

Opções

Vírgulas significam E. Restrições vazias não impõem limites. Operadores: ~= == != <= >= < > ===; .* somente em prefixos com == ou !=.

Até 1.000 linhas não vazias; 256 unidades UTF-16 por linha, 2.048 por restrição, 100.000 no total. A entrada é preservada.

Verificando as candidatas…

O teste de versão PEP 440 ajuda quando uma publicação aparentemente mais nova não atende a uma dependência. Ter uma escrita válida, ocupar uma posição posterior e satisfazer uma condição são verificações diferentes; o relatório mostra cada resultado.

No versionamento Python, 1.0 e 1.0.0 podem ter a mesma precedência. A normalização, porém, conserva a quantidade de componentes. Epoch, dev, post e rótulos locais seguem regras que uma ordenação alfabética não consegue representar.

Por que usar o teste de versão PEP 440?

Compare a escrita sem perder o original

O teste de versão PEP 440 apresenta v01.1 ao lado da forma normalizada 1.1. Abra os detalhes da linha para ver epoch, release, pre, post, dev e local. Assim, alterações de letras, zeros ou separadores ficam visíveis sem sobrescrever a lista.

Grafias diferentes passam pela normalização e viram cartões com segmentos alinhados, mantendo os cartões originais.

Veja por que um pré-lançamento ficou de fora

A política automática primeiro considera todos os candidatos que atendem às condições. Se houver uma versão não preliminar adequada, ela recebe prioridade. Caso contrário, os pré-lançamentos elegíveis podem ser aceitos. Acrescentar uma versão estável pode mudar outras linhas.

Dois filtros mostram pré-lançamentos separados quando existe uma versão estável adequada e aceitos quando ela não existe.

Três detalhes antes de ler o resultado

01

Escolha a pergunta certa

Normalizar verifica a escrita sem filtrar condições. Ordenar aplica a precedência do Python e preserva a ordem dos empates. Conferir restrições mantém a sequência original e distingue uma condição não atendida de uma exclusão pela política de pré-lançamento.

02

Teste com a lista completa

Remova uma versão estável que atende às condições e observe o uso alternativo dos pré-lançamentos. Incluir não muda os limites numéricos: 1.0rc1 continua menor que 1.0 e não atende a >=1.0.

03

Exporte somente resultados atuais

A execução automática aguarda 350 ms. Desative-a para usar o botão ou Ctrl/Cmd+Enter. Qualquer alteração bloqueia os resultados anteriores. Exemplo e Limpar pedem uma prévia; Desfazer restaura a entrada e o relatório anteriores.

Escrita, precedência e condições

Normalização sem apagar evidências

Prefixos v, zeros à esquerda, aliases como alpha e preview e separadores locais são normalizados. A quantidade de componentes da publicação é mantida: 1.0.0 continua visível dessa forma, mesmo que tenha a mesma precedência de 1.0.

Ordenação de todos os segmentos

A comparação começa pelo epoch, segue pelos números da publicação e aplica as regras de dev, alpha, beta, rc, final e post. Segmentos locais numéricos são comparados como inteiros. Valores maiores que o inteiro seguro do JavaScript não sofrem arredondamento.

Especificadores de versão em conjunto

São aceitos ~=, ==, !=, <=, >=, <, > e ===. Vírgulas significam E. Igualdade e exclusão permitem prefixos como 1.4.*. Cada resultado conserva o número físico da linha de origem, mesmo quando linhas vazias são ignoradas.

Erros preservados no relatório completo

Uma versão inválida afeta apenas a própria linha; uma restrição inválida interrompe o cálculo. Na ordenação, entradas inválidas ficam no fim. A tela acrescenta 50 linhas por vez, mas o JSON inclui todas as processadas, com valores originais e códigos de erro.

Escopo e limites da verificação

Não é um instalador de pacotes
Nomes de pacotes, extras, marcadores de ambiente, arquivos requirements, URLs e arquivos de bloqueio não são interpretados. Não há consulta ao PyPI, instalação, resolução de dependências, edição de projeto ou incremento de versão. Uma correspondência não comprova compatibilidade de API.
Sem atalhos de outros ecossistemas
Caret, til isolado, grupos OU e intervalos com hífen são rejeitados. Use ~=1.4 para uma publicação compatível. Uma restrição vazia não impõe limites numéricos, mas mantém a política de pré-lançamentos. Cláusulas vazias entre vírgulas são ignoradas.
Rótulos locais dependem do operador
O rótulo local influencia a ordenação. Condições públicas de igualdade ignoram o local da candidata; uma igualdade local explícita o compara. Condições de ordem e compatibilidade não podem conter local: >=1.0+linux é inválida.
=== tem um limite intencional
Esse operador compara a escrita normalizada sem equivalência por zeros acrescentados. As candidatas ainda precisam ser versões PEP válidas. legacy permanece inválida mesmo com ===legacy; o comportamento de instaladores antigos para versões arbitrárias não é reproduzido.
A política automática usa esta lista
Versões dev também são pré-lançamentos. Uma condição positiva que cite um pré-lançamento pode permiti-los. Nos demais casos, a alternativa depende da existência de uma versão não preliminar que atenda a todas as condições. Pacotes instalados não entram nessa decisão.
Limites explícitos, sem corte silencioso
Até 1.000 linhas não vazias, 256 unidades UTF-16 por linha, 2.048 por restrição e 100.000 na lista. Esses são limites da ferramenta. Linhas vazias são ignoradas, duplicatas permanecem e a normalização ou ordenação não reescreve a entrada original.

Perguntas sobre o teste de versão PEP 440

O que significa ~= em uma dependência Python?

O operador combina um limite inferior com um prefixo de publicação. ~=1.4 permite a partir de 1.4 dentro da série 1.*, enquanto ~=1.4.0 fica em 1.4.*. ~=1 é inválido por ter apenas um componente. A seleção de pré-lançamentos ocorre separadamente.

Por que um pré-lançamento corresponde sozinho, mas não em uma lista?

O filtro automático pode usar pré-lançamentos quando nenhuma outra candidata atende às condições. Acrescentar uma final ou post adequada muda essa escolha do conjunto. Incluir mostra todas as candidatas que passam nos limites; Excluir impede também a seleção alternativa.

Como versões públicas e locais são ordenadas?

Com a mesma parte pública, a local vem depois: 1.0 < 1.0+abc. Componentes locais numéricos vêm depois dos textuais. Valores equivalentes mantêm a ordem inicial. Diferentemente dos metadados de build do SemVer, local altera a precedência.

Posso usar um rótulo local em uma restrição?

Sim, com == ou !=, por exemplo ==1.0+linux.1. Não com >= ou ~=. Uma condição pública ==1.0 pode aceitar 1.0+linux.1 porque não exige um build local específico.

Como comparar números de versão em Python?

packaging.version.Version oferece a ordem compatível com PEP. A implementação no navegador é conferida com packaging 26.0. Comparar strings pode inverter 1.10 e 1.9, e outra norma de versões pode não interpretar epoch e post.

Posso colocar .* depois de pre ou post?

Não. ==1.0.* é um prefixo de publicação válido, mas ==1.0rc1.* e ==1.0.post1.* são inválidos. Use igualdade exata ou limites comuns para esses sufixos. O prefixo não desativa a política de pré-lançamentos.

Resultado inesperado?

Confira suas candidatas reais

Volte ao teste de versão PEP 440 com a lista completa e a restrição em investigação. Revise as linhas inválidas e a explicação dos pré-lançamentos antes de salvar o relatório atual com seus valores originais.