Parfois (ex: avec ipython --pylab) l'interpréteur python est lancé avec des modules prédéfinis chargés. Reste la question, pour savoir comment connaître l'alias utilisé o_O
yota
Réponses:
182
import sys
sys.modules.keys()
Une approximation pour obtenir toutes les importations pour le module actuel uniquement serait d'inspecter les globals()modules:
import typesdef imports():for name, val in globals().items():if isinstance(val, types.ModuleType):yield val.__name__
Cela ne retournera pas les importations locales ou les importations non-module comme from x import y. Notez que cela retourne val.__name__donc vous obtenez le nom du module d'origine si vous avez utilisé import module as alias; donnez le nom à la place si vous voulez l'alias.
Ou vous pouvez trouver l'intersection de sys.modules avec des globals, et ne faire aucun test de type.
Marcin
C'est la seule solution qui renvoie le nom complet du module lorsque vous redéfinissez le nom de votre module importé. Par exemple, si vous le faites import numpy as np, cela reviendra numpytandis que les deux autres suggestions reviendront np.
joelostblom
1
Si, pour une raison quelconque, vous avez besoin à la fois du nom du module et de l'alias, celui-ci est disponible dans la namevariable. Ainsi, pour générer la chaîne, import numpy as npfaites quelque chose comme 'import %s as %s' % (val.__name__, name)où se trouve maintenant l'instruction yield.
André C. Andersen
38
Trouvez l'intersection de sys.modulesavec globals:
import sys
modulenames = set(sys.modules)& set(globals())
allmodules =[sys.modules[name]for name in modulenames]
Peut-être utiliser un frozensetici à la place? - Voici mon 1-liner:frozenset(imap(lambda name: modules[name], frozenset(modules) & frozenset(globals())))
AT
La solution ci-dessus n'extrait pas les modules importés à l'aide de la fromcommande. Par exemple, considérez from scipy.stats import norm. Cela ne me dit pas que le normmodule est importé. Comment cela peut-il être intégré à cela?
Ujjwal
@Ujjwal Eh bien, ces modules ne sont pas importés, juste leurs composants. Si vous avez besoin de tout, utilisez simplement sys.modules.
Marcin
28
Si vous souhaitez effectuer cette opération depuis l'extérieur du script:
Python 2
from modulefinder importModuleFinder
finder =ModuleFinder()
finder.run_script("myscript.py")for name, mod in finder.modules.iteritems():print name
Python 3
from modulefinder importModuleFinder
finder =ModuleFinder()
finder.run_script("myscript.py")for name, mod in finder.modules.items():print(name)
Cela affichera tous les modules chargés par myscript.py.
Ce code liste les modules importés par votre module:
import sys
before =[str(m)for m in sys.modules]import my_module
after =[str(m)for m in sys.modules]print[m for m in after ifnot m in before]
Cela devrait être utile si vous voulez savoir quels modules externes installer sur un nouveau système pour exécuter votre code, sans avoir besoin d'essayer encore et encore.
Il ne listera pas le sysou les modules importés depuis celui-ci.
Voler @Lila (impossible de faire un commentaire faute de formatage), cela montre également le / chemin / du module:
#!/usr/bin/env pythonimport sysfrom modulefinder importModuleFinder
finder =ModuleFinder()# Pass the name of the python file of interest
finder.run_script(sys.argv[1])# This is what's different from @Lila's script
finder.report()
qui produit:
NameFile--------...
m token /opt/rh/rh-python35/root/usr/lib64/python3.5/token.py
m tokenize /opt/rh/rh-python35/root/usr/lib64/python3.5/tokenize.py
m traceback /opt/rh/rh-python35/root/usr/lib64/python3.5/traceback.py...
.. approprié pour grepping ou quoi que ce soit. Soyez prévenu, c'est long!
J'aime utiliser une compréhension de liste dans ce cas:
>>>[w for w in dir()if w =='datetime'or w =='sqlite3']['datetime','sqlite3']# To count modules of interest...>>> count =[w for w in dir()if w =='datetime'or w =='sqlite3']>>> len(count)2# To count all installed modules...>>> count = dir()>>> len(count)
ipython --pylab
) l'interpréteur python est lancé avec des modules prédéfinis chargés. Reste la question, pour savoir comment connaître l'alias utilisé o_ORéponses:
Une approximation pour obtenir toutes les importations pour le module actuel uniquement serait d'inspecter les
globals()
modules:Cela ne retournera pas les importations locales ou les importations non-module comme
from x import y
. Notez que cela retourneval.__name__
donc vous obtenez le nom du module d'origine si vous avez utiliséimport module as alias
; donnez le nom à la place si vous voulez l'alias.la source
import numpy as np
, cela reviendranumpy
tandis que les deux autres suggestions reviendrontnp
.name
variable. Ainsi, pour générer la chaîne,import numpy as np
faites quelque chose comme'import %s as %s' % (val.__name__, name)
où se trouve maintenant l'instruction yield.Trouvez l'intersection de
sys.modules
avecglobals
:la source
frozenset
ici à la place? - Voici mon 1-liner:frozenset(imap(lambda name: modules[name], frozenset(modules) & frozenset(globals())))
from
commande. Par exemple, considérezfrom scipy.stats import norm
. Cela ne me dit pas que lenorm
module est importé. Comment cela peut-il être intégré à cela?Si vous souhaitez effectuer cette opération depuis l'extérieur du script:
Python 2
Python 3
Cela affichera tous les modules chargés par myscript.py.
la source
.iteritems()
de.items()
et supports pour l'instruction d'impressionla source
disons que vous avez importé des mathématiques et re:
maintenant pour voir la même utilisation
Si vous l'exécutez avant l'importation et après l'importation, on peut voir la différence.
la source
Cela fonctionne plutôt bien avec:
Cela créera une liste avec des noms de modules importables .
la source
Ce code liste les modules importés par votre module:
Cela devrait être utile si vous voulez savoir quels modules externes installer sur un nouveau système pour exécuter votre code, sans avoir besoin d'essayer encore et encore.
Il ne listera pas le
sys
ou les modules importés depuis celui-ci.la source
Voler @Lila (impossible de faire un commentaire faute de formatage), cela montre également le / chemin / du module:
qui produit:
.. approprié pour grepping ou quoi que ce soit. Soyez prévenu, c'est long!
la source
J'aime utiliser une compréhension de liste dans ce cas:
la source