文章作者:Tyan
博客:noahsnail.com | CSDN | 简书
1. 引言
众所周知,Python语言简单、易学、开源、具有丰富的库,Python的第一个编译器是用C语言实现的。但Python的缺点也非常明显,最让人诟病的就是Python的性能问题。因此,为了提高程序的运行效率,通常会将程序的关键部分使用C或C++重写,编译成动态链接库,然后在Python(CPython)中进行调用。运行环境:Ubuntu 16.04、Python 2.7、Python 3.5。
2. Python C扩展
2.1 普通C函数
1 | void hello() |
2.2 Python C扩展
Python扩展模块由以下几部分组成:
- 头文件
- 调用的C函数
- 模块方法表
- 模块初始化函数
具体实现demo.c
如下:
1 | // 包含Python头文件 |
2.3 编译并测试
编写setup.py
文件:
1 | from distutils.core import setup, Extension |
生成动态链接库的命令如下:
1 | #python2 |
hello
,add
函数测试:
1 | >>> from demo import hello, add |
参考资料
- https://www.cnblogs.com/vamei/archive/2013/02/06/2892628.html
- https://www.yanxurui.cc/posts/python/2017-06-18-3-ways-of-calling-c-functions-from-python/
- https://swe.mirsking.com/languages/python/pythoncallcplusplus
- https://www.jianshu.com/p/cd28e8b0cce1
- https://docs.python.org/2.7/extending/extending.html
- https://docs.python.org/2.7/extending/building.html
- https://tutorialedge.net/python/python-c-extensions-tutorial/