Muitos módulos Python de terceiros têm um atributo que contém as informações de versão do módulo (geralmente algo como module.VERSION
ou module.__version__
), mas alguns não.
Exemplos particulares de tais módulos são libxslt e libxml2.
Preciso verificar se a versão correta desses módulos está sendo usada em tempo de execução. Existe uma maneira de fazer isso?
Uma solução potencial seria ler o código-fonte em tempo de execução, fazer um hash e depois compará-lo com o hash da versão conhecida, mas isso é desagradável.
Existe uma solução melhor?
pkg_resources
pode escolher uma versão diferente, sombreando aquela que você está realmente executando, porque ela tem precedência superior em seuPYTHONPATH
ou semelhante.__version__
atributo: stackoverflow.com/q/17583443/562769pkg_resources
o link é um erro 404Algumas ideias:
fonte
Você pode usar
para ver os pacotes instalados no formato de requisitos.
fonte
Você pode usar a
importlib_metadata
biblioteca para isso.Se você estiver em python <
3.8
, primeiro instale-o com:Desde o python
3.8
está incluído na biblioteca padrão do python.Em seguida, para verificar a versão de um pacote (neste exemplo
lxml
), execute:Lembre-se de que isso funciona apenas para pacotes instalados do PyPI. Além disso, você deve passar um nome de pacote como um argumento para o
version
método, em vez de um nome de módulo que este pacote fornece (embora geralmente sejam iguais).fonte
Achei pouco confiável usar as várias ferramentas disponíveis (incluindo a melhor
pkg_resources
mencionada por esta outra resposta ), pois a maioria delas não cobre todos os casos. Por exemploComo precisávamos de uma maneira confiável de obter a versão de qualquer pacote, módulo ou submódulo, acabei escrevendo getversion . É bastante simples de usar:
Consulte a documentação para obter detalhes.
fonte
Para módulos que não fornecem
__version__
o seguinte é feio, mas funciona:ou
fonte