为什么python可以将共享库作为模块导入?

时间:2013-07-16 13:55:50

标签: python swig

我一直在学习通过swig扩展python。在swig导师中,它写道:

Building a Python module

Turning C code into a Python module is also easy. Simply do the following (shown for    Irix, see the SWIG Wiki Shared Libraries page for help with other operating systems):

unix % swig -python example.i
unix % gcc -c example.c example_wrap.c \
    -I/usr/local/include/python2.1
unix % ld -shared example.o example_wrap.o -o _example.so 

We can now use the Python module as follows :
 >>> import example
 >>> example.fact(5)
 120
 >>> example.my_mod(7,3)
 1
 >>> example.get_time()
 'Sun Feb 11 23:01:07 1996'
 >>>

这意味着可以将共享库导入为python模块。但我知道共享库文件是一个目标文件,它包含许多机器代码和一些额外信息,而常规python模块是ascii文件或字节代码文件,如何通过python虚拟机执行机器代码,我很困惑。

1 个答案:

答案 0 :(得分:4)

最后,所有程序都执行机器代码。当Python 加载共享库,它调用一个函数 initlibraryName;这个函数回调 到Python中告诉它它有哪些类型,功能和模块, 什么机器地址的功能和类型 描述符是。 Python将它们添加到其表中(注意到这一点) 他们在C模块中,而不是Python代码),当你打电话时 它们,它们看起来,注意到它们在外部 模块,并相应地调用它们。