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 ?
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 ?
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.
Pourriez-vous coller l'intégralité de l'avertissement à par exemple paste.pocoo.org et de poster le lien ici ?
"/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.
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']
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
.
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.
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
.
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
/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'
/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.
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.
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
@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
.
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.
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.
Arash, vous pouvez aussi installer pip sous Windows ! Installez d'abord setuptools et utilisez ensuite easy_install pour installer pip :)
C'est excellent, mais il semble manquer certaines des bibliothèques que j'ai installées. Par exemple, il ne liste pas PyQt.
Sur ipython
vous pouvez taper " import
Tab ".
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()
.
pkgutil.iter_modules()
fonctionne, la solution pip ci-dessus ne liste pas tous les paquets, seulement ceux installés via pip.
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() .
@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()
.
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.
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.
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.
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
9 votes
Quel est le problème avec
pip list
?0 votes
J'ajoute cet oneliner du commentaire de Julius Naeumann :
python3 -c "help('modules')"