Descartando suporte para versões mais antigas do Python¶
O descarte de suporte para versões mais antigas do Python é suportado pela especificação padrão Especificações de metadados principais 1.2 através de um atributo “Requires-Python”.
Clientes com Metadata 1.2+, como Pip 9.0+, irão aderir a esta especificação combinando o tempo de execução Python atual e comparando-o com a versão necessária nos metadados do pacote. Se eles não corresponderem, ele tentará instalar a última distribuição de pacote que oferece suporte a esse tempo de execução do Python.
Este mecanismo pode ser usado para descartar o suporte para versões mais antigas do Python, alterando o atributo “Requires-Python” nos metadados do pacote.
Este guia é especificamente para usuários de setuptools, outras ferramentas de empacotamento como flit
podem oferecer funcionalidade semelhante, mas os usuários precisarão consultar a documentação relevante.
Requisitos¶
Este fluxo de trabalho exige que:
O editor esteja usando a versão mais recente de setuptools,
A última versão do twine seja usada para enviar o pacote,
O usuário que instala o pacote tenha pelo menos Pip 9.0 ou um cliente que tenha suporte à especificação Metadata 1.2.
Lidando com os wheels universais¶
Tradicionalmente, os projetos que fornecem código Python que é semanticamente compatível com Python 2 e Python 3, produzem wheels que têm uma tag py2.py3
em seus nomes. Ao descartar o suporte para Python 2, é importante não se esquecer de alterar essa tag para apenas py3
. Isso geralmente é configurado em setup.cfg
na seção [bdist_wheel]
definindo universal = 1
se eles usam setuptools.
Se você usar este método, remova esta opção ou seção, ou defina explicitamente universal
como 0
:
# setup.cfg
[bdist_wheel]
universal = 0 # Make the generated wheels have `py3` tag
Dica
Visto que ser possível sobrescrever as configurações de setup.cfg
via sinalizadores CLI, certifique-se de que seus scripts não tenham --universal
em seus scripts de criação de pacote.
Definindo a versão Python exigida¶
1. Baixe a versão mais recente do Setuptools¶
Certifique-se de, antes de gerar distribuições de fontes ou distribuições binárias, atualizar o Setuptools e instalar o twine.
Passos:
python3 -m pip install --upgrade setuptools twine
py -m pip install --upgrade setuptools twine
A versão do setuptools deve ser superior a 24.0.0.
2. Especifique os intervalos de versão para distribuições Python suportadas¶
Você pode especificar intervalos de versão e regras de exclusão, como pelo menos Python 3. Ou Python 2.7, 3.4 e superior.
Exemplos:
Requires-Python: ">=3"
Requires-Python: ">2.7,!=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
A maneira de definir esses valores está na chamada de setup
dentro do seu script setup.py
. Isso irá inserir os valores de metadados Requires-Python
com base no argumento fornecido em python_requires
.
from setuptools import setup
setup(
# Your setup arguments
python_requires='>=2.7', # Your supported Python ranges
)
3. Validando o Metadata antes de publicar¶
Dentro de um pacote fonte Python (o arquivo zip ou tar-gz que você baixou) está um arquivo de texto chamado PKG-INFO.
Este arquivo é gerado pelo Distutils ou setuptools quando ele gera o pacote fonte. O arquivo contém um conjunto de chaves e valores, a lista de chaves faz parte do formato de metadados padrão do PyPa.
Você pode ver o conteúdo do arquivo gerado assim:
tar xfO dist/my-package-1.0.0.tar.gz my-package-1.0.0/PKG-INFO
Valide que o seguinte está no lugar, antes de publicar o pacote:
Se você atualizou corretamente, o valor de Metadata-Version deve ser 1.2 ou superior.
O campo Requires-Python está definido e corresponde a sua especificação no setup.py.
4. Usando Twine para publicar¶
Twine tem uma série de vantagens, além de ser mais rápido, agora é o método suportado para publicação de pacotes.
Certifique-se de estar usando a versão mais recente do Twine, pelo menos 1.9.
Descartando uma versão Python¶
Depois de publicar um pacote com os metadados de Requires-Python, você pode fazer uma atualização adicional removendo esse tempo de execução Python do suporte.
Deve ser feito nesta ordem para que o alternativa automatizada funcione.
Por exemplo, você publicou o Requires-Python: “>=2.7” como a versão 1.0.0 do seu pacote.
Se você atualizasse a string da versão para “>=3.5” e publicasse uma nova versão 2.0.0 do seu pacote, todos os usuários executando o Pip 9.0+ a partir da versão 2.7 terão a versão 1.0.0 do pacote instalada e qualquer >=3.5 usuários receberão a versão 2.0.0.