注意:我已经在Java工作了多年,但我是Python的新手,所以如果这是一个模糊的问题我会道歉。我只是在试图让事情发挥作用时挣扎。
我正在尝试使用第三方Python模块,它是一个应用程序SDK。 Python模块是底层遗留C SDK的包装器。
这个模块的文档非常糟糕 - 它基本上是包含的类和方法的列表,几乎没有解释方法的作用或它们与底层C函数调用的关系。 (例如,在一种情况下,Python方法需要五个参数,底层的C函数需要六个。没有迹象表明区别是什么,或者参数应该是什么。这是典型的。)
有什么方法可以查看这个编译的Python模块(未提供源代码)并收集更多信息?
答案 0 :(得分:3)
查找模块信息的一个很好的起点是......
>>> import <modulename>
>>> <modulename>
它通常是四种可能类型中的一种......
<强> 1。内置的强>
>>> import sys
>>> sys
module 'sys' (built-in)>
这些通常用C语言编写,并编译成Python解释器二进制文件。
<强> 2。动态加载的库
>>> import parser
>>> parser
<module 'parser' from '/usr/lib/python2.7/lib-dynload/parser.x86_64-linux-gnu.so'>
这些通常也用C语言编写,但存储在单独的二进制文件中。常用文件扩展名包括:.pyd
,.dll
和.so
。
第3。 Python模块
>>> import socket
>>> socket
<module 'socket' from '/usr/lib/python2.7/socket.pyc'>
这些至少部分是用Python编写的,通常可以通过从文件名末尾删除c
来查看源代码,即/usr/lib/python2.7/socket.py
。
对于用Python编写导入其他二进制模块的模块来说,做一些无法在纯Python中完成的事情也很常见。例如......
>>> socket._socket
<module '_socket' (built-in)>
<强> 4。 Python包
>>> import xml
>>> xml
<module 'xml' from '/usr/lib/python2.7/xml/__init__.pyc'>
这些也至少部分用Python编写,但文件__init__.py
通常是空的,源代码包含在同一目录中的其他文件中,即/usr/lib/python2.7/xml
。