1101 votes

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

Je voudrais obtenir une liste des modules Python qui se trouvent dans mon installation Python (serveur UNIX).

Comment obtenir la liste des modules Python installés sur votre ordinateur ?

85 votes

Vous pouvez simplement faire >>>help() et ensuite >>>modules

3 votes

Existe-t-il une alternative ? help() se bloque pour moi.

2 votes

Beaucoup de ces réponses supposent que vous avez accès à une ligne de commande. Si vous utilisez AWS Lambda, vous devez faire tout cela depuis Python. Voir stackoverflow.com/a/54939905/117471

1143voto

ChristopheD Points 38217
help('modules')

dans un shell/prompt Python.

0 votes

Je reçois un tel avertissement : FutureWarning : apt API not stable yet warnings.warn("apt API not stable yet", FutureWarning). Je n'ai pas obtenu de liste de modules Python. J'utilise Python 2.5.

0 votes

Pourriez-vous coller l'intégralité de l'avertissement à par exemple paste.pocoo.org et de poster le lien ici ?

0 votes

"/usr/lib/python2.5/site-packages/apt/__init__.py:18 : FutureWarning : apt API not stable yet" est normal sur les Python de Debian/Ubuntu, un artefact de la tentative de greffer les paquets apt dans la gestion des paquets Python. Je vois toujours la liste (textuelle) des modules.

647voto

Adam Matan Points 15690

Solution

Ne pas utiliser avec pip > 10.0 !

Mes 50 centimes pour avoir obtenu un pip freeze -à 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)

En guise de (trop long) commentaire :

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 à l'étendue du système ou à l'étendue d'un environnement virtuel, et couvre les paquets installés par les services suivants setuptools , pip et ( à Dieu ne plaise ) easy_install .

Mon cas d'utilisation

J'ai ajouté le résultat de cet appel à mon serveur flask, de sorte que lorsque je l'appelle avec http://example.com/exampleServer/environment J'obtiens la liste des paquets installés sur le virtualenv du serveur. Cela facilite grandement 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 qu'un fichier setup.py il ne liste pas le paquet installé par setup.py .

Étapes à 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 des comportements setup.py en /tmp/behave :

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

Installez le paquet python à partir du dépôt git.

(test_env) $ cd /tmp/behave && pip 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 à partir 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 à partir 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 behave 's setup.py fichier.

Je n'ai pas trouvé de référence à ce problème dans la documentation. Je devrais peut-être ouvrir un bogue à ce sujet.

5 votes

Merci pour cette réponse ! Je pense qu'elle répond mieux à la question car je demande des modules Python installés "localement". Le gel de Pip n'est pas non plus toujours la bonne solution. Cela fonctionne mieux, je pense.

0 votes

pkgutil.iter_modules() fonctionne (voir la réponse de @Johnysweb) ; cette solution pip ci-dessus ne liste pas tous les paquets, seulement ceux installés via pip

0 votes

@metaperture pip.get_installed_distributions() affiche les paquets installés par pip , easy_install y setuptools ( python setup.py install ). La seule exception - je ne suis pas sûr qu'il s'agisse d'un bogue - est qu'il n'affiche pas un paquet s'il est appelé dans le même répertoire que celui de son fichier setup.py .

313voto

chiggsy Points 3695

J'ai moi-même essayé ces méthodes et j'ai obtenu exactement ce qui était annoncé : Tous les modules.

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

Vraiment, je veux les trucs qui I installé.

Ce qui, étonnamment, a bien fonctionné, c'est.. :

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 paquets est l'endroit exact où l'on s'attendrait à trouver cette fonctionnalité, même si ce n'est pas sous le nom de "freeze", mais le packaging de Python est tellement bizarre que je suis sidéré que cet outil ait un sens. Pip 0.8.2, Python 2.7.

4 votes

Je suppose que l'idée derrière ce nom est que vous obtenez un instantané "gelé" de ce qui est installé en ce moment, que vous pouvez ensuite réinjecter dans pip pour obtenir exactement les mêmes modules installés dans un environnement différent.

0 votes

Arash, vous pouvez aussi installer pip sous Windows ! Installez d'abord setuptools et utilisez ensuite easy_install pour installer pip :)

0 votes

C'est excellent, mais il semble manquer certaines des bibliothèques que j'ai installées. Par exemple, il ne liste pas PyQt.

91voto

Johnsyweb Points 45395
  • Sur ipython vous pouvez taper " importTab ".

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

  • En ligne de commande, vous pouvez utiliser pydoc modules .

  • Dans un script, on appelle pkgutil.iter_modules() .

6 votes

pkgutil.iter_modules() fonctionne, la solution pip ci-dessus ne liste pas tous les paquets, seulement ceux installés via pip.

2 votes

C'est génial ! Je pense qu'ils ont amélioré la documentation, depuis que la question a été posée. spam des modules pydoc recherche le spam dans les docs des modules. Le dernier point semble vous donner les informations suffisantes pour utiliser le module. @metaperture Pouvez-vous, s'il vous plaît, donner un exemple de la façon dont vous listez tous les modules locaux installés (pas la liste massive de stlib par help('modules')) par pkgutil.iter_modules() .

2 votes

@LéoLéopoldHertz Essayez cet extrait : python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]' . Il devrait vider tous les noms de modules comme une très grande liste Python. Le site x[1] est utilisé pour extraire le nom du module à partir des tuples générés par pkgutil.iter_modules() .

64voto

DrkNess Points 101

Dans un shell normal, utilisez simplement

pydoc modules

0 votes

Il semble que ce qui précède ne fonctionne que sur les plateformes 'nix. En tout cas, j'ai trouvé et exécuté le script, en adaptant la commande comme suit : c : \bin\pythos_2.7\lib\pydoc.py modules - cette liste a pris une éternité à construire, le format est nul, et elle omet le numéro de la version installée. Je passe mon tour.

2 votes

DavidA.Gray Je viens d'essayer cela sur une machine Windows avec Python 3, et cela fonctionne effectivement. En utilisant le lanceur python Windows vous pouvez faire py -m pydoc modules dans cmd ou Powershell.

0 votes

pydoc modules n'a pas fonctionné pour moi sous Windows 10 avec Python 3.6, mais modification @VKK : py -m pydoc modules fonctionne dans cmd/Powershell.

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