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

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top