Seperti disebutkan dalam komentar, inspect.getsource
tidak akan berfungsi karena bergantung pada file asli (mis., module.__file__
).
Opsi terbaik:periksa apakah ada .pyc
file (mis., foo.pyc
harus di samping foo.py
). Jika ada, Anda dapat menggunakan Dekompilasi Python 2.7 .pyc untuk mendekompilasinya.
inspect
modules juga menyimpan cache sumbernya. Anda mungkin beruntung dan menggunakan inspect.getsource(module)
, atau inspect.getsourcelines(module.function)
jika telah dipanggil di masa lalu.
Jika tidak, Anda harus membangun kembali modul "secara manual" dengan memeriksa hasil ekspor (mis., module.__globals__
). Konstanta dan yang lainnya sudah jelas, dan untuk fungsi Anda dapat menggunakan func.func_name
untuk mendapatkan namanya, func.__doc__
untuk mendapatkan docstring, inspect.getargspec(func)
untuk mendapatkan argumen, dan func.func_code
untuk mendapatkan detail tentang kode:co_firstlineno
akan mendapatkan nomor baris, lalu co_code
akan mendapatkan kode. Ada lebih banyak tentang dekompilasi di sini:Menjelajahi dan mendekompilasi bytecode python
Misalnya untuk menggunakan 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!'
Namun, tidak — saya tidak mengetahui metode langsung lainnya untuk mengambil modul dan mengeluarkan kembali kode sumbernya.