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
.
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
Tu peux essayer
>>> import statlib
>>> print statlib.__version__
>>> import construct
>>> print contruct.__version__
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
).
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
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
En python3 avec des crochets autour de print
>>> import celery
>>> print(celery.__version__)
3.1.14
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', ...]
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__
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.
Certains modules n'ont pas d'attribut __version__
, le moyen le plus simple est donc de vérifier dans le terminal: pip list
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'
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
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']
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).
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
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?
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
Recherchez le répertoire d'installation local (site-packages dans la plupart des cas) et l'auteur devrait y laisser des informations faciles à trouver.
(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
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.
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
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: