web-dev-qa-db-fra.com

Comment vérifier la version des modules python?

Je viens d'installer les modules python: construct et statlib avec setuptools comme ceci:

# Install setuptools to be able to download the following
Sudo apt-get install python-setuptools

# Install statlib for lightweight statistical tools
Sudo easy_install statlib

# Install construct for packing/unpacking binary data
Sudo easy_install construct

Je veux pouvoir vérifier (par programme) leurs versions. Existe-t-il un équivalent de python --version que je peux exécuter à partir de la ligne de commande?

Ma version python est 2.7.3.

448
tarabyte

Je suggère d'utiliser pip à la place de easy_install . Avec pip, vous pouvez lister tous les packages installés et leurs versions avec 

pip freeze

Dans la plupart des systèmes Linux, vous pouvez diriger ceci vers grep pour trouver la ligne du paquet particulier qui vous intéresse:

$ pip freeze | grep lxml
lxml==2.3

Pour un module individuel, vous pouvez essayer l'attribut __version__ , mais il existe des modules sans cet attribut:

$ python -c "import requests; print(requests.__version__)"
2.14.2
$ python -c "import lxml; print(lxml.__version__)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute '__version__'

Enfin, comme les commandes de votre question portent le préfixe Sudo, il apparaît que vous effectuez l'installation dans l'environnement python global. Nous vous conseillons vivement de vous pencher sur python environnement virtuel managers, par exemple virtualenvwrapper

473
alko

Tu peux essayer 

>>> import statlib
>>> print statlib.__version__

>>> import construct
>>> print contruct.__version__
285
damienfrancois

Utilisez le module pkg_resources distribué avec la bibliothèque setuptools. Notez que la chaîne que vous transmettez à la méthode get_distribution doit correspondre à l'entrée PyPI.

>>> import pkg_resources
>>> pkg_resources.get_distribution("construct").version
'2.5.2'

et si vous voulez l'exécuter depuis la ligne de commande, vous pouvez faire:

python -c "import pkg_resources; print(pkg_resources.get_distribution('construct').version)"

Notez que la chaîne que vous transmettez à la méthode get_distribution doit être le nom du package tel qu'il est enregistré dans PyPI, et non le nom du module que vous essayez d'importer. 

Malheureusement, ils ne sont pas toujours les mêmes (par exemple, vous faites pip install memcached, mais import memcache).

130
jkukul

Je pense que cela peut aider, mais installez d’abord le paquet show afin d’exécuter pip show, puis utilisez show pour trouver la version!

Sudo pip install show
# in order to get package version execute the below command
Sudo pip show YOUR_PACKAGE_NAME | grep Version
79
aabdulwahed

La meilleure façon de le faire est:


Pour les détails d'un paquet spécifique

pip show <package_name>

Il détaille le nom du paquet, la version, l'auteur, l'emplacement, etc.


$ pip show numpy
Name: numpy
Version: 1.13.3
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: [email protected]
License: BSD
Location: c:\users\prowinjvm\appdata\local\programs\python\python36\lib\site-packages
Requires:

Pour plus de détails: >>> pip help


pip devrait être mis à jour pour cela.

pip install --upgrade pip

La commande de recommandation sous Windows est: 

python -m pip install --upgrade pip

39
susan097

En python3 avec des crochets autour de print

>>> import celery
>>> print(celery.__version__)
3.1.14
30
user224767

module.__version__ est une bonne première chose à essayer, mais cela ne fonctionne pas toujours.

Si vous ne voulez pas décomposer et que vous utilisez les pip 8 ou 9, vous pouvez toujours utiliser pip.get_installed_distributions() pour obtenir les versions à partir de Python:

update: la solution ici fonctionne dans les pip 8 et 9, mais dans le pip 10, la fonction a été déplacée de pip.get_installed_distributions à pip._internal.utils.misc.get_installed_distributions pour indiquer explicitement que ce n'est pas à usage externe. Ce n’est pas une bonne idée d’y faire confiance si vous utilisez pip 10+.

import pip

pip.get_installed_distributions()  # -> [distribute 0.6.16 (...), ...]

[
    pkg.key + ': ' + pkg.version
    for pkg in pip.get_installed_distributions()
    if pkg.key in ['setuptools', 'statlib', 'construct']
] # -> nicely filtered list of ['setuptools: 3.3', ...]
17
waterproof

Les réponses précédentes n'ont pas résolu mon problème, mais ce code a:

import sys 
for name, module in sorted(sys.modules.items()): 
  if hasattr(module, '__version__'): 
    print name, module.__version__ 
14
tashuhka

Si les méthodes ci-dessus ne fonctionnent pas, essayez ce qui suit en python:

import modulename

modulename.version
modulename.version_info

Voir Obtenir la version Python Tornado?

Notez que le .version a également fonctionné pour moi sur quelques-uns autres que la tornade.

5
D Adams

Certains modules n'ont pas d'attribut __version__, le moyen le plus simple est donc de vérifier dans le terminal: pip list

4
Yuchao Jiang

Lorsque vous installez Python, vous obtenez également le gestionnaire de paquets Python, pip. Vous pouvez utiliser pip pour obtenir les versions des modules python. Si vous souhaitez répertorier tous les modules Python installés avec leurs numéros de version, utilisez la commande suivante:

$ pip freeze

Vous obtiendrez le résultat:

asn1crypto==0.22.0
astroid==1.5.2
attrs==16.3.0
Automat==0.5.0
backports.functools-lru-cache==1.3
cffi==1.10.0
...

Pour trouver individuellement le numéro de version, vous pouvez grep sur cette sortie sur des ordinateurs * NIX. Par exemple:

$ pip freeze | grep PyMySQL

PyMySQL == 0.7.11 Sur Windows, vous pouvez utiliser findstr au lieu de grep. Par exemple:

PS C:\> pip freeze | findstr PyMySql

PyMySQL == 0.7.11

Si vous souhaitez connaître la version d'un module dans un script Python, vous pouvez utiliser l'attribut __version__ du module pour l'obtenir. Notez que tous les modules ne viennent pas avec un attribut __version__. Par exemple,

>>> import pylint
>>> pylint.__version__
'1.7.1'
3
Sonia Rani

En supposant que nous utilisons Jupyter Notebook (si vous utilisez Terminal, supprimez les points d'exclamation):

1) si le paquet (par exemple xgboost) a été installé avec pip :

!pip show xgboost
!pip freeze | grep xgboost
!pip list | grep xgboost

2) si le paquet (par exemple, caffe) a été installé avec conda :

!conda list caffe
2
user10429366

Utilisezdir()pour savoir si le module a un attribut__version__.

>>> import Selenium
>>> dir(Selenium)
['__builtins__', '__doc__', '__file__', '__name__',
 '__package__', '__path__', '__version__']
>>> Selenium.__version__
'3.141.0'
>>> Selenium.__path__
['/venv/local/lib/python2.7/site-packages/Selenium']
2
jturi

Vous pouvez utiliser la bibliothèque importlib_metadata pour cela.

Si vous êtes sur python <3.8, installez-le d'abord avec:

pip install importlib_metadata

Depuis python 3.8, il est inclus dans la bibliothèque standard.

Ensuite, pour vérifier la version d'un paquet (dans cet exemple lxml), exécutez:

>>> from importlib_metadata import version
>>> version('lxml')
'4.3.1'

N'oubliez pas que cela ne fonctionne que pour les packages installés à partir de PyPI. De plus, vous devez passer un nom de package en tant qu'argument à la méthode version, plutôt qu'un nom de module fourni par ce package (bien qu'ils soient généralement identiques).

1
jkukul

Quick python programme pour lister tous les paquetages (vous pouvez le copier dans Requirements.txt)

from pip._internal.utils.misc import get_installed_distributions
print_log = ''
for module in sorted(get_installed_distributions(), key=lambda x: x.key): 
    print_log +=  module.key + '~=' + module.version  + '\n'
print(print_log)

La sortie ressemblerait à ceci:

asn1crypto~=0.24.0
attrs~=18.2.0
automat~=0.7.0
beautifulsoup4~=4.7.1
botocore~=1.12.98
1
Yarh

Pour obtenir une liste des modules non standard (pip) importés dans le module actuel:

[{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() 
   if pkg.key in set(sys.modules) & set(globals())]

Résultat:

>>> import sys, pip, nltk, bs4
>>> [{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() if pkg.key in set(sys.modules) & set(globals())]
[{'pip': '9.0.1'}, {'nltk': '3.2.1'}, {'bs4': '0.0.1'}]

Remarque:

Ce code a été créé à partir des solutions proposées sur cette page et de Comment lister les modules importés?

1
Tobias Bleisch

Cela fonctionne aussi dans Jupyter Notebook sous Windows! Tant que Jupyter est lancé à partir d'une ligne de commande compatible bash telle que Git Bash (MingW64), les solutions données dans de nombreuses réponses peuvent être utilisées dans Jupyter Notebook sur des systèmes Windows avec un minuscule Tweak. 

J'utilise Windows 10 Pro avec Python installé via Anaconda et le code suivant fonctionne lorsque je lance Jupyter via Git Bash (mais pas lorsque je lance l'application depuis Anaconda Prompt).

Le Tweak: Ajoutez un point d'exclamation (!) devant pip pour le rendre !pip.

>>>!pip show lxml | grep Version
Version: 4.1.0

>>>!pip freeze | grep lxml
lxml==4.1.0

>>>!pip list | grep lxml
lxml                               4.1.0                  

>>>!pip show lxml
Name: lxml
Version: 4.1.0
Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
Home-page: http://lxml.de/
Author: lxml dev team
Author-email: [email protected]
License: BSD
Location: c:\users\karls\anaconda2\lib\site-packages
Requires: 
Required-by: jupyter-contrib-nbextensions
0
Karl Baker

Recherchez le répertoire d'installation local (site-packages dans la plupart des cas) et l'auteur devrait y laisser des informations faciles à trouver.

0
Gary

(voir aussi https://stackoverflow.com/a/56912280/7262247 )

J'ai trouvé assez peu fiable d'utiliser les divers outils disponibles (y compris le meilleur pkg_resources mentionné par réponse de Jakub Kukul ), comme la plupart d'entre eux ne couvre pas tous les cas . Par exemple

  • modules intégrés
  • modules non installés mais ajoutés au chemin python (par votre IDE par exemple)
  • deux versions du même module disponible (une dans python chemin remplaçant celle installée)

Comme nous avions besoin d’un moyen fiable pour obtenir la version de n’importe quel paquet, module ou sous-module , j’ai fini par écrire getversion . C'est assez simple à utiliser:

from getversion import get_module_version
import foo
version, details = get_module_version(foo)

Voir le documentation pour plus de détails.

0
smarie

En me basant sur réponse de Jakub Kukul , j'ai trouvé un moyen plus fiable de résoudre ce problème.

Le principal problème de cette approche est que les packages doivent être installés "de manière conventionnelle" (et que l’utilisation de pip install --user) n’est pas utilisée, ou être dans le système PATH à l’initialisation Python.

Pour contourner cela, vous pouvez utiliser pkg_resources.find_distributions(path_to_search). Cela recherche essentiellement les distributions qui pourraient être importées si path_to_search était dans le système PATH.

Nous pouvons parcourir ce générateur comme ceci:

avail_modules = {}
distros = pkg_resources.find_distributions(path_to_search)
for d in distros:
    avail_modules[d.key] = d.version

Cela retournera un dictionnaire ayant des modules comme clés et leur version comme valeur. Cette approche peut être étendue à beaucoup plus que le numéro de version.

Merci à Jakub Kukul pour avoir indiqué la bonne direction

0
Alessio Arena

Vous pouvez utiliser cette commande dans l'invite de commande.

pip show Modulename

ex: pip show xlrd

vous obtiendrez une sortie comme celle-ci avec tous les détails.

Name: xlrd
Version: 1.2.0
Summary: Library for developers to extract data from Microsoft Excel (tm) spreadsheet files
Home-page: http://www.python-Excel.org/
Author: John Machin
Author-email: [email protected]
License: BSD
Location: c:\users\rohit.chaurasiya\appdata\local\programs\python\python37\lib\site-packages
Requires:
Required-by:
0
Rohit Chaurasiya