Jak je uvedeno v komentářích, inspect.getsource
nebude fungovat, protože závisí na původním souboru (tj. module.__file__
).
Nejlepší možnost:zkontrolujte, zda tam není .pyc
soubor (např. foo.pyc
by měl být vedle foo.py
). Pokud existuje, můžete jej dekompilovat pomocí Decompile Python 2.7 .pyc.
inspect
moduly také ukládají do mezipaměti zdroj. Možná budete mít štěstí a použijete inspect.getsource(module)
nebo inspect.getsourcelines(module.function)
pokud byl volán v minulosti.
V opačném případě budete muset modul znovu sestavit "ručně" kontrolou exportů (tj. module.__globals__
). Konstanty a podobně jsou zřejmé a pro funkce můžete použít func.func_name
získat jeho název, func.__doc__
chcete-li získat dokumentační řetězec, inspect.getargspec(func)
pro získání argumentů a func.func_code
pro získání podrobností o kódu:co_firstlineno
získá číslo řádku a poté co_code
získá kód. Zde je více o dekompilaci:Prozkoumání a dekompilace pythonového bytecode
Chcete-li například použít uncompyle2
:
>>> def foo():
... print "Hello, world!"
...
>>> from StringIO import StringIO
>>> import uncompyle2
>>> out = StringIO()
>>> uncompyle2.uncompyle("2.7", foo.func_code, out=out)
>>> print out.getvalue()
print 'Hello, world!'
Ale ne – nejsem si vědom žádné přímočařejší metody, jak vzít modul a získat zdrojový kód zpět.