vous pouvez simplement faire >>> help () puis >>> modules
Julius Naeumann
1
Y a-t-il une alternative? help () se bloque pour moi.
Paulo Carvalho
2
Beaucoup de ces réponses supposent que vous avez accès à une ligne de commande. Si vous utilisez AWS Lambda, vous devez tout faire depuis Python. Voir stackoverflow.com/a/54939905/117471
Bruno Bronosky
Réponses:
610
Solution
Ne pas utiliser avec pip> 10,0!
Mes 50 cents pour obtenir une pip freezeliste similaire à 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 tant que doublure (trop longue):
sorted(["%s==%s"%(i.key, i.version)for i in pip.get_installed_distributions()])
Cette solution applique à la portée du système ou à un champ d'environnement virtuel, et couvre les paquets installés par setuptools, pipet ( à Dieu ne plaise ) 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/environmentj'obtiens la liste des packages 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 qu'un setup.pyfichier, il ne répertorie pas le package 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) $
Nous nous sommes comportés setup.pyen /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.eggFinished 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.5a1est absent du deuxième exemple, car le répertoire de travail contient behavele setup.pyfichier de.
Je n'ai trouvé aucune référence à ce problème dans la documentation. Je vais peut-être ouvrir un bug pour cela.
Merci pour cette réponse! Je pense que cela répond mieux à la question car je demande des modules Python installés "localement". Le gel du pip n'est pas non plus toujours la voie à suivre. Cela fonctionne mieux - je pense.
Léo Léopold Hertz
3
@Masi vient d'ajouter une explication détaillée de la mise en garde de cette solution. C'est en effet étrange.
Adam Matan
21
Une alternative:import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
ebolyen
14
Depuis le pip 10, cette réponse ne fonctionnera plus. Le commentaire de @ebolyen montre des commandes alternatives qui fonctionnent. Je suis arrivé à la même conclusion et j'ai posté le code révisé complet ci-dessous.
Big_Al_Tx
5
Dans les versions récentes de pip, cela ne fonctionnera pas, générant un message d'erreur disant AttributeError: module 'pip' has no attribute 'get_installed_distributions'.
Je dis "étonnamment" parce que l'outil d'installation de package est l'endroit exact auquel on s'attendrait à trouver cette fonctionnalité, bien que ce ne soit pas sous le nom de "gel", mais le packaging en python est si bizarre, que je suis sidéré que cet outil ait du sens. Pip 0.8.2, Python 2.7.
Je suppose que l'idée derrière le nom est que vous obtenez un instantané "figé" 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.
Ryan C. Thompson
Arash, vous pouvez également installer pip dans Windows! Installez d'abord setuptools puis utilisez easy_install pour installer pip :)
gawbul
C'est excellent, mais il semble manquer certaines des bibliothèques que j'ai installées. Par exemple, il ne répertorie pas PyQt.
Ça marche. Qu'est-ce qu'un python en désordre? Pourquoi ne peuvent-ils pas se concerter et proposer des solutions similaires à ce qui existe dans Rails? (Gemfile, bundler, rvm)
Dimitris
106
Depuis pip version 1.3, vous avez accès à:
pip list
Ce qui semble être du sucre syntaxique pour le "pip freeze". Il répertorie tous les modules spécifiques à votre installation ou virtualenv, ainsi que leurs numéros de version. Malheureusement, il n'affiche le numéro de version actuel d'aucun module, ni ne lave votre vaisselle ni ne fait briller vos chaussures.
pkgutil.iter_modules()fonctionne, la solution pip ci-dessus ne répertorie pas tous les packages, seulement ceux installés via pip.
métaperture
2
Impressionnant! Je pense qu'ils ont amélioré la documentation, depuis que la question a été posée. pydoc modules spam recherche le spam dans les documents 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éo Léopold Hertz
2
@ 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 en une seule très grande liste Python. Le x[1]bit est utilisé pour extraire le nom du module des tuples générés par pkgutil.iter_modules().
Philip Conrad
76
Je l'utilise juste pour voir les modules actuellement utilisés:
import sys as s
s.modules.keys()
qui montre tous les modules fonctionnant sur votre python.
Pour tous les modules intégrés, utilisez:
s.modules
C'est un dict contenant tous les modules et les objets d'importation.
# Après avoir importé sys "import sys as s", vous pouvez imprimer avec: print sys.modules.keys ()
Dan Evans
Je ne sais pas pourquoi mon message a été modifié, mais merci d'avoir utilisé les informations que j'ai publiées pour corriger les erreurs dans les messages précédents. Vous retournerez des erreurs si vous utilisez help () vs help (''). Cela vaut également pour dir ('') & sys ('') etc. J'espère que cela aide et n'est pas supprimé.
Dan Evans
Ignorez mon dernier message, ce message n'a pas été modifié. Je pensais à un article similaire trouvé ici: stackoverflow.com/questions/139180/… Désolé pour la confusion.
Dan Evans
7
Voté, car c'est la seule méthode qui semble fonctionner sur des systèmes contraints qui n'ont pydocni pipinstallé ni installé (un NAS dans mon cas).
Thomas
1
D'accord avec Thomas. J'utilise repl.it, par exemple, qui est également un type d'environnement contraint. help('modules')se bloque sans réponse pour moi. Mais cette approche sysfonctionne parfaitement
Il semble que ce qui précède ne fonctionne que sur les plateformes 'nix. Dans tous les cas, j'ai trouvé et exécuté le script, en adaptant la commande comme suit: modules c: \ bin \ pythos_2.7 \ lib \ pydoc.py - cette liste a pris une éternité à construire, le format est nul et il omet la version installée nombre. Je passerai.
David A. Gray
2
@ DavidA.Gray Je viens de l'essayer sur une machine Windows avec Python 3, et cela fonctionne en fait. En utilisant le lanceur de fenêtres python, vous pouvez le faire py -m pydoc modulesen cmd ou Powershell.
VKK
pydoc modulesn'a pas fonctionné pour moi dans Windows 10 avec Python 3.6, mais modification @VKK: py -m pydoc modulesfonctionne dans cmd / Powershell.
Martin
41
Depuis le pip 10, la réponse acceptée ne fonctionnera plus. L'équipe de développement a supprimé l'accès à la get_installed_distributionsroutine. Il y a une fonction alternative dans le setuptoolspour faire la même chose. Voici une version alternative qui fonctionne avec pip 10:
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s"%(i.key, i.version)for i in installed_packages])print(installed_packages_list)
Veuillez me faire savoir si cela fonctionnera ou non dans les versions précédentes de pip.
Je cherchais cette solution et me frayais un chemin en essayant de comprendre pkg_resources. Si je pouvais voter plus d'une fois, je le ferais. Merci, @Big_Al_Tx! Mise à jour: Sauf .... lorsque je fais un «pip pipeze» dans mon environnement virtuel et que je le compare à la sortie de ceci, il y a des paquets qui manquent. Avez-vous des idées sur la raison pour laquelle cela pourrait / se produirait?
numberwhun
@numberwhun - Je suis content que cela ait fonctionné pour vous. Je suis désolé, mais je n'ai pas de réponse pour la différence avec pip freeze; la profondeur de mes connaissances sur ce sujet est plutôt limitée. J'ai en quelque sorte cherché mon chemin vers la solution lorsque la réponse acceptée ne fonctionnait pas pour moi et j'ai essayé de la combiner avec une réponse liée à setuptoolset de la faire fonctionner.
Big_Al_Tx
github.com/pypa/pip/issues/5243 - Le discours de l'équipe de développement sur la suppression de l'accès au get_installed_distributions routine.
bl79
@ bl79 - Je pense que c'est l'endroit exact où j'ai obtenu la référence setuptools.
Big_Al_Tx
@Big_Al_Tx: Eh bien, j'ai en quelque sorte travaillé autour de l'option setuptools (qui était waaaay à masquer pour mes besoins) et je suis allé avec ceci: installed_pkgs = subprocess.check_output (['pip', 'freeze']) Il fait exactement ce que je J'en avais besoin pour faire .... Ouais !!
numberwhun
26
Si nous devons répertorier les packages installés dans le shell Python, nous pouvons utiliser la helpcommande comme suit
J'utilise normalement pip listpour obtenir une liste de packages (avec version).
Cela fonctionne aussi dans un environnement virtuel. Pour afficher ce qui est installé uniquement dans l'environnement virtuel (pas les packages globaux), utilisez pip list --local.
Voici une documentation montrant toutes les pip listoptions disponibles , avec plusieurs bons exemples.
Cela devrait être la réponse acceptée! Une ligne :)
AlmostPitt
9
Cette solution est principalement basée sur des modules importlibet pkgutilfonctionne avec CPython 3.4 et CPython 3.5, mais ne prend pas en charge CPython 2.
Explication
sys.builtin_module_names- nomme tous les modules intégrés (regardez ma réponse ici )
pkgutil.iter_modules() - retourne une information sur tous les modules disponibles
importlib.util.find_spec() - retourne une information sur l'importation du module, s'il existe
BuiltinImporter- un importateur de modules intégrés ( docs )
SourceFileLoader- un importateur pour un module Python standard (par défaut a l'extension * .py) ( docs )
ExtensionFileLoader- un importateur de modules comme bibliothèque partagée (écrit sur le C ou C ++)
Code complet
import sys
import os
import shutil
import pkgutil
import importlib
import collections
if sys.version_info.major ==2:raiseNotImplementedError('CPython 2 is not supported yet')def main():# name this file (module)
this_module_name = os.path.basename(__file__).rsplit('.')[0]# dict for loaders with their modules
loaders = collections.OrderedDict()# names`s of build-in modulesfor module_name in sys.builtin_module_names:# find an information about a module by name
module = importlib.util.find_spec(module_name)# add a key about a loader in the dict, if not exists yetif module.loader notin loaders:
loaders[module.loader]=[]# add a name and a location about imported module in the dict
loaders[module.loader].append((module.name, module.origin))# all available non-build-in modulesfor module_name in pkgutil.iter_modules():# ignore this moduleif this_module_name == module_name[1]:continue# find an information about a module by name
module = importlib.util.find_spec(module_name[1])# add a key about a loader in the dict, if not exists yet
loader = type(module.loader)if loader notin loaders:
loaders[loader]=[]# add a name and a location about imported module in the dict
loaders[loader].append((module.name, module.origin))# pretty print
line ='-'* shutil.get_terminal_size().columns
for loader, modules in loaders.items():print('{0}\n{1}: {2}\n{0}'.format(line, len(modules), loader))for module in modules:print('{0:30} | {1}'.format(module[0], module[1]))if __name__ =='__main__':
main()
@ Léo Léopold Hertz, pourquoi en avez-vous besoin?
PADYMKO
Pour comprendre comment votre approche est meilleure / pire que l'approche d'Adam.
Léo Léopold Hertz 준영
1
@ Léo Léopold Hertz. Une réponse courte: essayez-le vous-même dans une production et tirez vous-même des conclusions. Réponse longue: l'approche d'Adam est basée sur le pipsystème de gestion des packages utilisé pour installer et gérer les packages logiciels écrits en Python et un résultat pip.get_installed_distributions()renvoie les modules installés avec le pip. Ma réponse est entièrement basée sur la bibliothèque standard de Python et couvre tous les modules disponibles pour l'importation. Un plus gros inconvénient de ma réponse - pas de support pour le CPython 2.
PADYMKO
1
@ Léo Léopold Hertz vous vous trompez, il le fait. Je l'ai testé sur mon ordinateur. Ma réponse contient une signification spéciale **truncated**, où une sortie est tronquée. Peut-être que vous ne faites pas attention, mais si ce n'est pas le cas, alors pour m'envoyer des informations sur votre système et la mise en œuvre de Python, je ferai des recherches supplémentaires pour le corriger.
PADYMKO
9
Attention: Adam Matan déconseille cette utilisation dans pip> 10.0. Lisez également le commentaire de @ sinoroc ci-dessous
Cela a été inspiré par la réponse d' Adam Matan (la réponse acceptée):
import tabulate
try:from pip import get_installed_distributions
except:from pip._internal.utils.misc import get_installed_distributions
tabpackages =[]for _, package in sorted([('%s %s'%(i.location, i.key), i)for i in get_installed_distributions()]):
tabpackages.append([package.location, package.key, package.version])print(tabulate.tabulate(tabpackages))
ce qui vous permet ensuite de discerner facilement les packages que vous avez installés avec et sans sudo.
Une note de côté: j'ai remarqué que lorsque j'installe un paquet une fois via sudoet une fois sans, l'un a priorité afin que l'autre ne soit pas répertorié (un seul emplacement est affiché). Je crois que seul celui du répertoire local est alors répertorié. Cela pourrait être amélioré.
@sinoroc Merci de l'avoir signalé. Les points 1 à 3 ne semblent pas être applicables à cette solution, car ce script a pour seul but d'utiliser pipune fois puis de quitter. Il semble que ce soit davantage un problème que le comportement puisse changer.
Daniel F
D'accord, les raisons pour lesquelles il n'y a pas d'API publique ne s'appliquent pas à ce morceau de code particulier. Mais comme pip n'est pas tenu de garantir une API publique, il est libre de modifier ses API internes, sa structure de code, etc. dans une version ultérieure, comme il l'a déjà fait auparavant. C'est pourquoi ce code a un try / except, pour intercepter la réorganisation de code interne précédente qui était destinée à clarifier que les API internes sont des API internes et non publiques ( _internal). Dans l'ensemble, cela fonctionne évidemment, mais c'est une mauvaise pratique. Il existe de meilleures alternatives, certaines sont dans les autres réponses à cette question.
sinoroc
1
ce script ne fonctionnera pas si le module "pip" n'est pas là.
Alexander Stohr
8
Mis à part l'utilisation, pip freezej'ai installé le jaune d'oeuf dans mes environnements virtuels.
pip freeze fait tout pour trouver des packages, mais il suffit d'écrire la commande suivante pour répertorier tous les chemins d'accès aux packages python.
Un petit script qui répertorie tous les modules disponibles pour une installation Python est caché dans le répertoire source de la documentation en 2.5.
Avantages:
utilise uniquement imp, sys, os, re, time
conçu pour fonctionner sur Python 1.5.2 et plus récent
le code source est vraiment compact, vous pouvez donc facilement le bricoler, par exemple pour passer une liste d'exceptions de modules buggy (n'essayez pas de les importer)
J'avais besoin de trouver la version spécifique des packages disponibles par défaut dans AWS Lambda. Je l'ai fait avec un mélange d'idées de cette page. Je le partage pour la postérité.
import pkgutil
__version__ ='0.1.1'def get_ver(name):try:return str(__import__(name).__version__)except:returnNonedef lambda_handler(event, context):return{'statusCode':200,'body':[{'path': m.module_finder.path,'name': m.name,'version': get_ver(m.name),}for m in list(pkgutil.iter_modules())#if m.module_finder.path == "/var/runtime" # Uncomment this if you only care about a certain path],}
Ce que j'ai découvert, c'est que la bibliothèque boto3 fournie était bien dépassée et que ce n'était pas ma faute si mon code échouait. J'avais juste besoin d'ajouter boto3 et botocore à mon projet. Mais sans cela, je me serais cogné la tête en pensant que mon code était mauvais.
Voici une solution de code python qui renverra une liste des modules installés. On peut facilement modifier le code pour inclure les numéros de version.
import subprocess
import sys
from pprint import pprint
installed_packages = reqs = subprocess.check_output([sys.executable,'-m','pip','freeze']).decode('utf-8')
installed_packages = installed_packages.split('\r\n')
installed_packages =[pkg.split('==')[0]for pkg in installed_packages if pkg !='']
pprint(installed_packages)
quel répertoire de sites-packages? Cela pourrait faire mieux: ls / usr / {local /,} lib / python $ (python -V 2> & 1 | cut -d "" -f2 | cut -d. -F1-2) / site-packages
vezult
Cela ne montrera pas non plus les modules intégrés, ou les modules dans un PYTHONPATH personnalisé, ou ceux installés dans le "mode de développement" de setuptools, etc.
dF.
Mon /usr/local/lib/python2.5/site-packages est vide, bien que j'aie installé des modules.
Léo Léopold Hertz 준영
14
Félicitations pour ne pas avoir supprimé cette réponse votée. Il est utile pour la communauté de pouvoir comprendre pourquoi une réponse commune est considérée comme incorrecte.
Jeremy Stein
1
@JeremyStein Une meilleure stratégie (plus utile et probablement moins dommageable pour les représentants) serait probablement de modifier la question pour expliquer pourquoi c'est faux, une fois que cela a été expliqué dans les commentaires ...
Réponses:
Solution
Ne pas utiliser avec pip> 10,0!
Mes 50 cents pour obtenir une
pip freeze
liste similaire à un script Python:En tant que doublure (trop longue):
Donnant:
Portée
Cette solution applique à la portée du système ou à un champ d'environnement virtuel, et couvre les 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 à mon serveur flask, donc quand je l'appelle avec,
http://example.com/exampleServer/environment
j'obtiens la liste des packages 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 qu'un
setup.py
fichier, il ne répertorie pas le package installé parsetup.py
.Étapes à reproduire:
Créer un environnement virtuel Cloner un dépôt git avecsetup.py
Nous nous sommes comportés
Installez le paquet python à partir du dépôt gitsetup.py
en/tmp/behave
:Si nous exécutons la solution susmentionnée à partir de
/tmp
Si nous exécutons la solution susmentionnée à partir de
/tmp/behave
behave==1.2.5a1
est absent du deuxième exemple, car le répertoire de travail contientbehave
lesetup.py
fichier de.Je n'ai trouvé aucune référence à ce problème dans la documentation. Je vais peut-être ouvrir un bug pour cela.
la source
import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
AttributeError: module 'pip' has no attribute 'get_installed_distributions'
.dans un shell / invite Python.
la source
pydoc modules
fonctionne. Vous devez le soumettre comme réponse.python -c 'help("modules")'
Maintenant, ces méthodes, je les ai essayées moi-même et j'ai obtenu exactement ce qui était annoncé: tous les modules.
Hélas, vraiment vous ne vous souciez pas beaucoup du stdlib, vous savez ce que vous obtenez avec une installation python.
Vraiment, je veux les trucs que j'ai installés.
Ce qui, en fait, étonnamment, a très bien fonctionné était:
Qui a renvoyé:
Je dis "étonnamment" parce que l'outil d'installation de package est l'endroit exact auquel on s'attendrait à trouver cette fonctionnalité, bien que ce ne soit pas sous le nom de "gel", mais le packaging en python est si bizarre, que je suis sidéré que cet outil ait du sens. Pip 0.8.2, Python 2.7.
la source
Depuis pip version 1.3, vous avez accès à:
Ce qui semble être du sucre syntaxique pour le "pip freeze". Il répertorie tous les modules spécifiques à votre installation ou virtualenv, ainsi que leurs numéros de version. Malheureusement, il n'affiche le numéro de version actuel d'aucun module, ni ne lave votre vaisselle ni ne fait briller vos chaussures.
la source
pip list --local
une distinction entrevirtualenv
les packages de sites globaux et discutés ici .pip list
est le plus simple et le meilleur. Voici les options et les détails.Dans,
ipython
vous pouvez taper "import
Tab".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()
.la source
pkgutil.iter_modules()
fonctionne, la solution pip ci-dessus ne répertorie pas tous les packages, seulement ceux installés via pip.python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'
. Il devrait vider tous les noms de modules en une seule très grande liste Python. Lex[1]
bit est utilisé pour extraire le nom du module des tuples générés parpkgutil.iter_modules()
.Je l'utilise juste pour voir les modules actuellement utilisés:
qui montre tous les modules fonctionnant sur votre python.
Pour tous les modules intégrés, utilisez:
C'est un dict contenant tous les modules et les objets d'importation.
la source
pydoc
nipip
installé ni installé (un NAS dans mon cas).help('modules')
se bloque sans réponse pour moi. Mais cette approchesys
fonctionne parfaitementDans une coque normale, utilisez simplement
la source
py -m pydoc modules
en cmd ou Powershell.pydoc modules
n'a pas fonctionné pour moi dans Windows 10 avec Python 3.6, mais modification @VKK:py -m pydoc modules
fonctionne dans cmd / Powershell.Depuis le pip 10, la réponse acceptée ne fonctionnera plus. L'équipe de développement a supprimé l'accès à la
get_installed_distributions
routine. Il y a une fonction alternative dans lesetuptools
pour faire la même chose. Voici une version alternative qui fonctionne avec pip 10:Veuillez me faire savoir si cela fonctionnera ou non dans les versions précédentes de pip.
la source
pip freeze
; la profondeur de mes connaissances sur ce sujet est plutôt limitée. J'ai en quelque sorte cherché mon chemin vers la solution lorsque la réponse acceptée ne fonctionnait pas pour moi et j'ai essayé de la combiner avec une réponse liée àsetuptools
et de la faire fonctionner.get_installed_distributions routine
.setuptools
.Si nous devons répertorier les packages installés dans le shell Python, nous pouvons utiliser la
help
commande comme suitla source
J'utilise normalement
pip list
pour obtenir une liste de packages (avec version).Cela fonctionne aussi dans un environnement virtuel. Pour afficher ce qui est installé uniquement dans l'environnement virtuel (pas les packages globaux), utilisez
pip list --local
.Voici une documentation montrant toutes les
pip list
options disponibles , avec plusieurs bons exemples.la source
Recherche très simple à l'aide de pkgutil.iter_modules
la source
for m in iter_modules()
et cela a également fonctionné.sur windows, entrez ceci en cmd
la source
J'ai rencontré un python 2.7 installé sur OS X. Il fallait X11 pour répertorier les modules installés (à l'aide de l'aide et de pydoc).
Pour pouvoir lister tous les modules sans installer X11 j'ai exécuté pydoc en tant que serveur http, c'est-à-dire:
Ensuite, il est possible de diriger Safari
http://localhost:12345/
pour voir tous les modules.la source
Essayez-les
ou
la source
CA aidera
Dans le terminal ou IPython, tapez:
puis
la source
Cette solution est principalement basée sur des modules
importlib
etpkgutil
fonctionne avec CPython 3.4 et CPython 3.5, mais ne prend pas en charge CPython 2.Explication
sys.builtin_module_names
- nomme tous les modules intégrés (regardez ma réponse ici )pkgutil.iter_modules()
- retourne une information sur tous les modules disponiblesimportlib.util.find_spec()
- retourne une information sur l'importation du module, s'il existeBuiltinImporter
- un importateur de modules intégrés ( docs )SourceFileLoader
- un importateur pour un module Python standard (par défaut a l'extension * .py) ( docs )ExtensionFileLoader
- un importateur de modules comme bibliothèque partagée (écrit sur le C ou C ++)Code complet
Usage
Pour le CPython3.5 (tronqué)
Pour le CPython3.4 (tronqué)
la source
pip
système de gestion des packages utilisé pour installer et gérer les packages logiciels écrits en Python et un résultatpip.get_installed_distributions()
renvoie les modules installés avec le pip. Ma réponse est entièrement basée sur la bibliothèque standard de Python et couvre tous les modules disponibles pour l'importation. Un plus gros inconvénient de ma réponse - pas de support pour le CPython 2.**truncated**
, où une sortie est tronquée. Peut-être que vous ne faites pas attention, mais si ce n'est pas le cas, alors pour m'envoyer des informations sur votre système et la mise en œuvre de Python, je ferai des recherches supplémentaires pour le corriger.Attention: Adam Matan déconseille cette utilisation dans pip> 10.0. Lisez également le commentaire de @ sinoroc ci-dessous
Cela a été inspiré par la réponse d' Adam Matan (la réponse acceptée):
qui imprime ensuite un tableau sous forme de
ce qui vous permet ensuite de discerner facilement les packages que vous avez installés avec et sans
sudo
.Une note de côté: j'ai remarqué que lorsque j'installe un paquet une fois via
sudo
et une fois sans, l'un a priorité afin que l'autre ne soit pas répertorié (un seul emplacement est affiché). Je crois que seul celui du répertoire local est alors répertorié. Cela pourrait être amélioré.la source
pip
une fois puis de quitter. Il semble que ce soit davantage un problème que le comportement puisse changer._internal
). Dans l'ensemble, cela fonctionne évidemment, mais c'est une mauvaise pratique. Il existe de meilleures alternatives, certaines sont dans les autres réponses à cette question.Mis à part l'utilisation,
pip freeze
j'ai installé le jaune d'oeuf dans mes environnements virtuels.la source
Dans le cas où une distribution python anaconda est installée, vous pouvez également utiliser
en plus des solutions décrites ci-dessus.
la source
conda install
, cela devrait fonctionner :)sys.modules
pip
), vous pouvez regarderpip.get_installed_distributions()
Pour le deuxième objectif, exemple de code:
la source
/usr/bin/python
ou celui qui vient de python.org ? Pour l'ancien, je peux l'utilisersys.modules
sans problème.system.modules
au lieu desys.modules
.Pour les versions récentes telles que Pip 20
Exécutez ce qui suit dans votre éditeur python ou IPython
Lisez d'autres réponses et rassemblez ce combo, qui est le plus rapide et le plus simple à l' intérieur de Python
la source
pip freeze fait tout pour trouver des packages, mais il suffit d'écrire la commande suivante pour répertorier tous les chemins d'accès aux packages python.
la source
Il existe de nombreuses façons d'écorcher un chat.
La manière la plus simple est d'utiliser la
pydoc
fonction directement depuis le shell avec:pydoc modules
Mais pour plus d'informations, utilisez l'outil appelé pip-date qui vous indique également les dates d'installation.
pip install pip-date
la source
Il y a beaucoup d'idées, au départ je réfléchis sur ces deux:
pépin
aide («modules»)
J'ai besoin d'une approche simple, utilisant des bibliothèques de base et compatible avec l'ancien python 2.x
Et je vois la lumière: listmodules.py
Un petit script qui répertorie tous les modules disponibles pour une installation Python est caché dans le répertoire source de la documentation en 2.5.
Avantages:
la source
J'avais besoin de trouver la version spécifique des packages disponibles par défaut dans AWS Lambda. Je l'ai fait avec un mélange d'idées de cette page. Je le partage pour la postérité.
Ce que j'ai découvert, c'est que la bibliothèque boto3 fournie était bien dépassée et que ce n'était pas ma faute si mon code échouait. J'avais juste besoin d'ajouter boto3 et botocore à mon projet. Mais sans cela, je me serais cogné la tête en pensant que mon code était mauvais.
Ce que j'ai découvert était également différent de ce qu'ils publient officiellement . Au moment de la rédaction de ceci:
la source
Installation
Code
Exemple de sortie:
la source
Voici une solution de code python qui renverra une liste des modules installés. On peut facilement modifier le code pour inclure les numéros de version.
la source
Pour ceux qui se demandent comment appeler à
pip list
partir d'un programme Python, vous pouvez utiliser ce qui suit:la source
De la coquille
Si cela ne vous aide pas, vous pouvez le faire.
Et voyez ce que cela produit.
la source