Seite 1 von 1
alle gebrauchten module eines moduls listen
Verfasst: Mittwoch 5. Februar 2014, 23:53
von init-0
Hallo,
ich würde gerne alle module auflisten die ein anderes modul benötigt.
Mein bisheriger Code ist:
Code: Alles auswählen
for name in dir(m): #__import__(m)
print(name)
val = getattr(m, name)
if isinstance(val, types.ModuleType) and hasattr(val, "__file__"):
yield val.__name__, val.__file__
Das Problem dabei ist, dass dinge die durch
dadurch nicht angezeigt werden.
Hat jemand Vorschläge wie das besser gehen kann?
Ich hab mir überlegt so über die module zu iterieren, aber leider werden die o.g. module auch nicht angezeit:
Hat jemand Vorschläge?
Re: alle gebrauchten module eines moduls listen
Verfasst: Donnerstag 6. Februar 2014, 00:22
von pillmuncher
Zuerst:
Code: Alles auswählen
# file: m.py
def foo():
import pprint, string
pprint.pprint([
list(string.lowercase)[:10],
list(string.uppercase)[:10],
list(string.digits)])
Und dann:
Code: Alles auswählen
>>> import m, types
>>>
>>> m.foo()
[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'],
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']]
>>>
>>> for name in dir(m):
... print(name)
... val = getattr(m, name)
... if isinstance(val, types.ModuleType) and hasattr(val, "__file__"):
... print val.__name__, val.__file__
...
__builtins__
__doc__
__file__
__name__
__package__
foo
Oops!
Re: alle gebrauchten module eines moduls listen
Verfasst: Donnerstag 6. Februar 2014, 00:24
von snafu
Code: Alles auswählen
import inspect
def get_modules(module):
modules = set()
for name in dir(module):
obj = getattr(module, name)
mod = inspect.getmodule(obj)
if mod is not None and mod is not module:
modules.add(mod)
return modules
Re: alle gebrauchten module eines moduls listen
Verfasst: Donnerstag 6. Februar 2014, 00:25
von Sirius3
@init-0: so wie Du das vorhast, funktioniert das überhaupt nicht. Schau Dir mal das ast-Modul an.
Re: alle gebrauchten module eines moduls listen
Verfasst: Donnerstag 6. Februar 2014, 00:53
von pillmuncher
Das noch:
Code: Alles auswählen
>>> mm = [getattr(__builtins__, '__tropmi__'[::-1])('M'.lower())]
>>> mm
[<module 'm' from 'm.pyc'>]
>>> mm.pop().foo()
[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'],
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']]
Und das:
Code: Alles auswählen
>>> import m
>>> class M(type(m)):
... def bar(self):
... print 'hello!'
...
>>> M('M')
<module 'M' (built-in)>
>>> M('M').bar()
hello!
Wer mal 3h Zeit hat, sollte sich in dem Zusammenhang
diesen Vortrag von David Beazley anschauen. Über Modulimport spricht er ab
2:02:31.
Re: alle gebrauchten module eines moduls listen
Verfasst: Donnerstag 6. Februar 2014, 01:51
von EyDu
Mal anders gefragt: Warum möchtest du überhaupt wissen, welche Module von einem Modul importiert werden?
Re: alle gebrauchten module eines moduls listen
Verfasst: Donnerstag 6. Februar 2014, 02:07
von DasIch
Du kannst bestenfalls die Namen der Abhängigkeiten bestimmen, identifizieren kann man die statisch nicht da zur Laufzeit z.B. sys.path verändert werden könnte.