Question Comment puis-je obtenir une liste des modules Python installés localement?


Je voudrais obtenir une liste de modules Python, qui sont dans mon installation Python (serveur UNIX).

Comment pouvez-vous obtenir une liste des modules Python installés sur votre ordinateur?


741
2018-04-11 12:34


origine


Réponses:


Solution

Mes 50 cents pour obtenir un pip freeze-comme la liste d'un script Python:

import pip
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
     for i in installed_packages])
print(installed_packages_list)

Comme un (trop long) un paquebot:

sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

Donnant:

['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24', 
 'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3', 
 'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
 'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1', 
 'werkzeug==0.9.4']

Portée

Cette solution s'applique à la portée du système ou à une étendue d'environnement virtuel et couvre les packages installés par setuptools, pip et (Dieu pardonne) easy_install.

Mon cas d'utilisation

J'ai ajouté le résultat de cet appel à mon serveur flask, donc quand je l'appelle avec http://example.com/exampleServer/environment Je reçois la liste des paquets installés sur virtualenv du serveur. Cela facilite beaucoup le débogage.

Avertissements

J'ai remarqué un comportement étrange de cette technique - lorsque l'interpréteur Python est invoqué dans le même répertoire que setup.py fichier, il ne répertorie pas le paquet installé par setup.py.

Étapes à suivre pour reproduire:

Créer un environnement virtuel
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $ 
Cloner un repo git avec setup.py
(test_env) $ git clone https://github.com/behave/behave.git
Cloning into 'behave'...
remote: Reusing existing pack: 4350, done.
remote: Total 4350 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
Resolving deltas: 100% (2388/2388), done.
Checking connectivity... done.

Nous nous comportons setup.py dans /tmp/behave:

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Installez le paquet python à partir du repo git
(test_env) $ cd /tmp/behave && python setup.py install
running install
...
Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
Finished processing dependencies for behave==1.2.5a1

Si nous exécutons la solution susmentionnée de /tmp

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp'

Si nous exécutons la solution susmentionnée de /tmp/behave

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp/behave'

behave==1.2.5a1 est manquant dans le deuxième exemple, car le répertoire de travail contient behavede setup.py fichier.

Je n'ai trouvé aucune référence à ce problème dans la documentation. Peut-être que je vais ouvrir un bug pour cela.


484
2018-05-27 09:05



help('modules')

dans un shell / invite Python.


800
2018-04-11 12:45



Maintenant, ces méthodes, je me suis essayé, et j'ai eu exactement ce qui était annoncé: Tous les modules.

Hélas, vous ne vous souciez pas vraiment du stdlib, vous savez ce que vous obtenez avec une installation python.

Vraiment, je veux les trucs qui je installée.

Ce qui en fait, étonnamment, a bien fonctionné était:

pip freeze

Qui est revenu:

Fabric==0.9.3
apache-libcloud==0.4.0
bzr==2.3b4
distribute==0.6.14
docutils==0.7
greenlet==0.3.1
ipython==0.10.1
iterpipes==0.4
libxml2-python==2.6.21

Je dis "étonnamment" parce que l'outil d'installation de paquet est l'endroit exact auquel on s'attendrait pour trouver cette fonctionnalité, bien que pas sous le nom 'geler' mais l'empaquetage de python est tellement bizarre, que je suis sidéré que cet outil ait du sens. Pip 0.8.2, Python 2.7.


221
2018-01-16 03:42



  • Dans ipython vous pouvez taper "importLanguette".

  • Dans l'interpréteur Python standard, vous pouvez taper "help('modules')".

  • Sur la ligne de commande, vous pouvez utiliser pydoc  modules.

  • Dans un script, appelez pkgutil.iter_modules().


69
2018-02-08 13:24



Depuis la version 1.3 de pip, vous avez accès à:

pip list

Ce qui semble être du sucre syntactique pour "pip gel". Il listera tous les modules spécifiques à votre installation ou virtualenv, ainsi que leurs numéros de version. Malheureusement, il n'affiche pas le numéro de version actuel d'un module, ni ne lave votre vaisselle ni ne fait briller vos chaussures.


62
2017-07-25 22:56



Dans la coquille normale, utilisez simplement

pydoc modules

51
2017-08-23 09:45



Je l'utilise juste pour voir les modules actuellement utilisés:

import sys as s
s.modules.keys()

qui montre tous les modules en cours d'exécution sur votre python.

Pour tous les modules intégrés, utilisez:

s.modules

Ce qui est une dict contenant tous les modules et les objets d'importation.


48
2018-06-22 22:02



Si nous avons besoin de lister les paquets installés dans le shell Python, nous pouvons utiliser le helpcommande comme suit

>>help('modules package')

18
2018-01-02 09:26