在Python中访问隐藏的库函数?

时间:2016-05-07 14:56:35

标签: function python-3.x

所以当我编写代码时,我遇到了这个:

from hidden_lib import train_classifier

出于好奇,有没有办法使用终端访问该功能,看看里面有什么?

1 个答案:

答案 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做同样的事情,你需要找到其他类似的库。