Que versões de Python suportar em 2018?

Boa parte do meu trabalho como Data Engineer é implementar e manter linhas de produção de dados (data pipelines) — o que antigamente era conhecido como ETL (Extract, Transform, Load). A vantagem de usar Python é que existe um pacote pronto para qualquer tarefa: no caso de operações de ETL existe um pacote chamado petl que é excelente.

Durante a preparação de uma apresentação interna notei que o suporte para arquivos XLSX do petl tinha alguns bugs e deprecation warnings. Mandei um pull request corrigindo as deprecation warnings e constatei que o mesmo falhava para a instância de Python 2.6 nos testes de integração contínua do Travis CI.

O seguinte aviso me chamou a atenção nos logs do build para Python 2.6:

DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6

Oras, se o core team do Python não provê suporte para Python 2.6, por que você deveria? Abri um ticket propondo abandonar o suporte para Python 2.6 e um dos mantenedores do projeto postou as estatísticas de instalação:

Fantástico, não? Você pode gerar as estatísticas de instalação para o seu pacote PyPI usando o seguinte comando:

Duas coisas interessantes:

  • as instalações de Python 2.6 estão abaixo de 1%
  • já tem um doido usando Python 3.7 um mês antes do lançamento

EOL — End of Life

Quanto maior a empresa maior a possibilidade de manter rodando sistemas muito além do ciclo de vida oficial: quantas multinacionais ainda estão rodando Windows XP mais de 4 anos depois da Microsoft encerrar completamente o suporte porque ainda tem algum departamento usando aquele sistema legado que não roda no Windows 10?

Uma das mais complexas responsabilidades da TI é garantir que as áreas de negócios compreendam o ciclo de vida dos investimentos em software e hardware. É por isso que a tendência hoje é comprar serviços, não comprar software: nenhum gestor quer o pesadelo de ser obrigado a manter um servidor CentOS 5.0 rodando de frente pra Internet por conta de uma aplicação só roda no JDK 1.4.

Quando abandonar o suporte?

Algumas regras que eu uso a fim de “dropar” suporte para versões legadas:

  1. se estiver usando CI, quando uma atualização quebrar o build para uma versão de Python em EOL é melhor abandonar o suporte a essa versão do que consertar o build.
  2. quando as instalações caírem abaixo de 1% (quem está preso no Python 2.6 sempre pode instalar uma versão anterior)

Então, que versões de Python suportar em 2018?

A opção conservadora é suportar Python 2.7 e maior ou igual a 3.4.

Faz sentido continuar suportando Python 2.7? Na minha humilde opinião não faz sentido manter suporte para 2.7 se você puder evitar:

Veja a timeline dos diversos branchs oficiais do Python:

Veja a timeline de diversos projetos importantes que prometeram abandonar o suporte para Python 2 até 2020:

Timeline for flagship Python Projects

Conclusão

Em 2018 não existe motivo para suportar versões de Python em “End of Life” como 2.6, e 3.X onde X é menor ou igual a 4 (3.4 EOL em Março de 2019, menos de 1 ano).

Você praticamente 1 ano e meio para portar aplicações Python 2.7 para Python 3.6 ou superior.

http://pythonclock.org