946 votes

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?

998voto

ChristopheD Points 38217
 help('modules')
 

dans un shell / invite Python.

585voto

Adam Matan Points 15690

Solution

Mon 50 cents pour obtenir un pip freeze-comme la liste à partir 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 une (trop longue) un liner:

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

Donner:

['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 pour le système de la portée ou à un environnement virtuel portée, et couvre des paquets installés par setuptools, pip et (à dieu ne plaise) easy_install.

Mon cas d'utilisation

J'ai ajouté le résultat de cet appel à ma gourde serveur, donc quand je l'appelle il avec http://example.com/exampleServer/environment - je obtenir la liste des paquets installés sur le serveur du virtualenv. Il permet de déboguer un ensemble beaucoup plus facile.

Mises en garde

J'ai remarqué un comportement étrange de cette technique, lorsque l'interpréteur Python est invoquée dans le même répertoire qu'un setup.py le fichier, il ne liste pas le package installé en setup.py.

Étapes 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 avons comportement de l' setup.py en /tmp/behave:

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py

Installer le paquet python depuis le 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 l'on effectue ladite solution d' /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 l'on effectue ladite solution d' /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 behaves' setup.py le fichier.

Je ne pouvais trouver aucune référence à cette question dans la documentation. Peut-être que je vais ouvrir un bug pour elle.

277voto

chiggsy Points 3695

Maintenant, ces méthodes que j'ai essayé moi-même, et j'ai obtenu exactement ce qui avait été annoncé: Tous les modules.

Hélas, vraiment de vous ne se soucient pas beaucoup sur la stdlib, vous savez ce que vous obtenez avec un python installer.

Vraiment, je veux les trucs que j'ai installé.

De ce fait, étonnamment, a très bien fonctionné, a été de:

pip freeze

Qui est retourné:

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 "surprise", car le package d'installation est le lieu exact où l'on pourrait s'attendre à trouver cette fonctionnalité, bien que n'étant pas sous le nom de "geler" mais python emballage est tellement bizarre, que je suis sidéré que cet outil a un sens. Pip 0.8.2, Python 2.7.

87voto

Johnsyweb Points 45395
  • En ipython vous pouvez taper "importOnglet".

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

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

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

64voto

DrkNess Points 101

Dans la coquille normale, utilisez simplement

 pydoc modules
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X