Como gerar uma exceção sobre o número versão de um módulo
-
03-07-2019 - |
Pergunta
Como você pode gerar uma exceção quando você importa um módulo que é menor ou maior do que um dado valor para a sua __version __?
Há uma série de diferentes maneiras que você poderia fazer isso, mas eu sinto que deve haver alguma maneira realmente simples que ilude-me no momento. Neste caso, o número da versão é do formato x.x.x
Solução
Python vem com esta embutido como parte de distutils. O módulo é chamado distutils.version
e é capaz de comparar vários formatos de número versão diferente.
from distutils.version import StrictVersion
print StrictVersion('1.2.2') > StrictVersion('1.2.1')
Para maneira mais informação do que você precisa, consulte a documentação:
>>> import distutils.version
>>> help(distutils.version)
Outras dicas
Se você está falando de módulos instalados com easy_install, este é o que você precisa
import pkg_resources
pkg_resources.require("TurboGears>=1.0.5")
isso irá gerar um erro se o módulo instalado é de uma versão inferior
Traceback (most recent call last):
File "tempplg.py", line 2, in <module>
pkg_resources.require("TurboGears>=1.0.5")
File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 626, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 528, in resolve
raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (TurboGears 1.0.4.4 (/usr/lib/python2.5/site-packages/TurboGears-1.0.4.4-py2.5.egg), Requirement.parse('TurboGears>=1.0.5'))
Assim?
assert tuple(map(int,module.__version__.split("."))) >= (1,2), "Module not version 1.2.x"
Esta é prolixo, mas funciona muito bem.
Além disso, olhar para pip , que fornece funcionalidades mais avançadas.
Você deve estar usando setuptools:
Ele permite bloquear as dependências de uma aplicação, por isso mesmo que nunca vai ser usado várias versões de uma exist ovo ou pacote em um sistema só o caminho certo.
Esta é a melhor maneira de trabalhar: Ao invés de falhar se a versão errada de uma dependência está presente é melhor para garantir que a versão correta está presente.
Setuptools fornece um instalador que garante que tudo que é necessário para executar o aplicativo está presente no momento da instalação. Ela também lhe dá os meios para seleccionar qual das muitas versões de um pacote que pode estar presente em seu PC é aquele que é carregado quando você emitir uma declaração de importação.
Se você sabe a exata formatação da cadeia de versão uma comparação simples vai funcionar:
>>> "1.2.2" > "1.2.1"
True
isso só funcionará se cada parte da versão está em um dígito, no entanto:
>>> "1.2.2" > "1.2.10" # Bug!
True