zoukankan      html  css  js  c++  java
  • 使用c语言扩展python

    背景:我们工作中可能有时需要和第三方对接,而第三方提供的sdk可能是c语言或者c++编写的,而我们程序使用的语言是python,这时候就需要使用python调用c库

    参考官方文档:https://docs.python.org/3/extending/extending.html

    编写python扩展分三步:

    第一步:创建应用代码

    使用c语言编写具体的功能代码,如果sdk已经提供了并且不需要我们整合,则跳过这一步

    第二步:根据样板编写封装代码

    样板代码主要包含四部分

    1. 包含Python头文件

    2. 为每一个模块函数添加形如 static PyObject* Module_func()的封装函数

    关于函数参数转换和返回值转换可以参考官方文档:https://docs.python.org/3/c-api/arg.html#

    3. 将所有模块函数添加到static PyMethodDef ModuleMethods[]数组中,这是个二维数组

    例如:

    static PyMethodDef SpamMethods[] = {
        ...
        {"system"(函数名称),  spam_system(函数), METH_VARARGS(表示参数以元组的形式给定),
         "Execute a shell command."},
        ...
        {NULL, NULL, 0, NULL}        /* Sentinel */
    };
    

      

    4. 添加模块初始化函数void initModule,在初始化函数中调用Py_InitModule(“模块名”, ModuleMethods)进行初始化

    第三步:编译并测试

    使用distutils包来进行编译工作

    1. 创建setup.py

    from distutils.core import setup, Extension
    setup(name="custom", version="1.0",
          ext_modules=[Extension("custom", ["custom.c"])])

    2. 运行setup.py来编译并链接代码

    1) python setup.py build 编译,会在当前目录下生成build文件夹

    2) python setup.py install 安装,将编译好的包放到site-packages中

    3. 在python中导入模块

    4. 测试函数

  • 相关阅读:
    ChsDet is a Charset Detector (检测字符编码)
    Microsoft Fakes进行单元测试
    区域及分离、Js压缩、css、jquery扩展
    服务端软件的服务品质
    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context}
    开发之技能
    分布式
    工具集
    Visual Studio Code
    Autofac 入门
  • 原文地址:https://www.cnblogs.com/CLAYJJ/p/13125288.html
Copyright © 2011-2022 走看看