咨询Python 3.6.4发行版include文件夹内.h文件的使用方式与场景
Python 3.6.4 include目录中.h文件的用途、使用方式及场景
嘿,先给你把这些.h文件的本质说清楚:它们是Python给C/C++开发者准备的交互接口头文件,普通写.py脚本的场景完全用不上,只有涉及跨语言交互的时候才会派上用场。下面给你拆解具体的使用方式和场景:
1. 编写Python C扩展模块
如果你的Python代码有性能瓶颈(比如密集数值计算、高频IO操作),想用C/C++重写核心逻辑来提速,同时希望Python能直接调用这段代码,这些.h文件就是你必须依赖的工具。
举个极简的实现步骤:
- 新建C文件(比如
hello.c),开头必须引入核心头文件:#include <Python.h> // 定义Python可调用的函数 static PyObject* hello_world(PyObject* self, PyObject* args) { return PyUnicode_FromString("Hello from C extension!"); } // 注册方法表,告诉Python哪些函数可以被调用 static PyMethodDef HelloMethods[] = { {"hello", hello_world, METH_NOARGS, "Return a hello string from C."}, {NULL, NULL, 0, NULL} // 数组结束标记 }; // 定义模块结构 static struct PyModuleDef hellomodule = { PyModuleDef_HEAD_INIT, "hello", // 模块名 NULL, // 模块文档 -1, // 保持全局状态 HelloMethods }; // 模块初始化函数,Python导入时会自动调用 PyMODINIT_FUNC PyInit_hello(void) { return PyModule_Create(&hellomodule); } - 写一个
setup.py用setuptools编译:from setuptools import setup, Extension module = Extension('hello', sources=['hello.c']) setup( name='HelloExtension', version='1.0', ext_modules=[module] ) - 执行
python setup.py build,编译后会生成.pyd文件(Windows下的Python扩展模块),之后你就能在Python里import hello并调用hello.hello()了。
2. 将Python解释器嵌入到C/C++程序中
如果你有一个用C/C++开发的桌面应用、服务程序,想让它支持Python脚本扩展(比如让用户自定义业务逻辑),就需要把Python解释器嵌入到你的C程序里,这时候也得用到这些.h文件。
简单示例:
#include <Python.h> int main() { // 初始化Python解释器 Py_Initialize(); // 执行一段Python代码 PyRun_SimpleString("print('Hello from embedded Python!')"); // 关闭解释器 Py_Finalize(); return 0; }
编译这个C程序时,需要链接Python的库文件(在你的Python安装目录libs文件夹里,比如python36.lib),并且要保证编译器位数和Python一致(你用的是32位Python,所以得用32位编译器编译)。
Windows环境额外注意事项
- 编译扩展或嵌入程序时,要使用和Python版本匹配的编译器:Python 3.6是用Visual Studio 2015编译的,最好用VS2015或兼容版本编译,避免兼容性问题。
- 确保路径配置正确:编译时要让编译器能找到
include目录的头文件,以及libs目录的库文件。
内容的提问来源于stack exchange,提问作者Eshan Pandey
相关产品推荐
相关产品推荐

