所以当我编写代码时,我遇到了这个:
from hidden_lib import train_classifier
出于好奇,有没有办法使用终端访问该功能,看看里面有什么?
答案 0 :(得分:3)
您可以使用“inspect”库来执行此操作,但只有在计算机上某处有“hidden_lib”的源代码时才能使用它:
>>> import hidden_lib
>>> import inspect
>>> print inspect.getsource(hidden_lib.train_classifier)
否则库会抛出异常:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\inspect.py", line 701, in getsource
lines, lnum = getsourcelines(object)
File "C:\Python27\lib\inspect.py", line 690, in getsourcelines
lines, lnum = findsource(object)
File "C:\Python27\lib\inspect.py", line 529, in findsource
raise IOError('source code not available')
IOError: source code not available
在这种情况下,您需要先反编译.pyc文件。要做到这一点,你需要去:
https://github.com/wibiti/uncompyle2
然后下载包,转到包文件夹并安装它:
C:\package_location> C:\Python27\python.exe setup.py install
现在,您可以通过键入[1]:
轻松找到库的位置>>> hidden_lib.__file__
然后转到指向的目录并解压缩文件:
>C:\Python27\python.exe C:\Python27\Scripts\uncompyle2 -o C:\path_pointed_by_[1]\hidden_lib.py C:\path_pointed_by_[1]\hidden_lib.pyc
来源应该成功反编译:
# 2016.05.07 17:47:36 Central European Daylight Time
+++ okay decompyling hidden_lib.pyc
# decompiled 1 files: 1 okay, 0 failed, 0 verify faile
# 2016.05.07 17:47:36 Central European Daylight Time
现在,您可以按照我在帖子开头描述的方式显示hidden_lib公开的函数源。如果您正在使用iPython,您还可以使用嵌入式函数帮助(hidden_lib.train_classifier)来完成相同的操作。
重要说明:uncompyle2库(我使用的)仅适用于Python 2.7,如果你想对Python 3.x做同样的事情,你需要找到其他类似的库。