Verificar versão do Python durante a execução (runtime)

Verificar versão do Python durante a execução (runtime)

Overview

Se você é desenvolvedor e já esbarrou na diferença de versões ou na necessidade de assegurar a retrocompatibilidade em Python, este post é pra você! De maneira descontraída, mas levando a sério a importância da compatibilidade, vamos explorar formas eficazes de identificar a versão do Python em execução. Prepare-se para imergir em exemplos práticos, garantindo que seus projetos rodem suavemente em diferentes versões da linguagem.

Diferença de versão e retrocompatibilidade são problemas que desenvolvedores tem que tratar com frequência. Uma das formas de se fazer isso com Python é verificando qual é a versão está sendo utilizada no momento. Abaixo estão algumas formas de se fazer isso.

A primeira delas é utilizando sys.version. Ele é uma string que retorna uma série de informações e podemos (facilmente) extrair apenas o número da versão:

>>> import sys
>>>
>>> print(sys.version)
'3.4.3 (default, Nov 17 2016, 01:08:31) \n[GCC 4.8.4]'
>>>
>>> print("Versão atual do Python: %s" % sys.version.split(" ")[0])
Current Python Version: 3.4.3

Como demonstrado, a propriedade sys.version retorna uma string com duas linhas. Uma das formas de extrair o número da versão seria quebrar (split) a string utilizando espaços como referência e pegar a primeira posição do vetor. A alternativa para o split(" “) seria utilizar sys.version[:5], mas quando um dos números da versão passar a utilizar duas casas (exemplo: 3.4.10), esta segunda forma irá falhar.

Existe uma segunda forma de se fazer isso é utilizando a sys.version_info. Ela retorna um vetor com as informações separadas, veja o exemplo:

>>> import sys
>>> 
>>> sys.version_info
sys.version_info(major=3, minor=4, micro=3, releaselevel='final', serial=0)
>>>
>>> version_detail  = "Major: %s\r\n" % sys.version_info[0]
>>> version_detail += "Minor: %s\r\n" % sys.version_info[1]
>>> version_detail += "Micro: %s\r\n" % sys.version_info[2]
>>> version_detail += "Release Level: %s\r\n" % sys.version_info[3]
>>> version_detail += "Serial: %s\r\n" % sys.version_info[4]
>>> print(version_detail)
Major: 3
Minor: 4
Micro: 3
Release Level: final
Serial: 0

Conforme demonstrado no exemplo acima, a sys.version_info retorna um vetor com as informações de versão separadas por: major, minor, micro, release level e serial. Desta forma, se a sua quebra de compatibilidade for entre Python 2 e 3, você pode utilizar apenas a informação de major ([0]) do vetor. Pessoalmente, acho esta abordagem mais flexível para fazer esta verificação.

Considerando estas duas formas, veja abaixo o exemplo de como verificar a versão atual do Python:

>>> import sys
>>>
>>> if sys.version_info[0] < 3:
...     print("Sorry, i need Python 3+ to run.")
... else:
...     print("Great! You're running Python 3! Let's do stuff!")
... 
Great! You're running Python 3! Let's do stuff!

Se quiser estes fontes de exemplo, eles estão disponíveis no nosso github.

Espero ter ajudado!