首页 > 编程语言 >用C语言为python写C扩展

用C语言为python写C扩展

时间:2022-11-14 14:35:50浏览次数:52  
标签:NULL python 扩展 C语言 int add build calc

calc.c

#include <stdio.h> #include <Python.h> int add(int x, int y){ // C 函数 return x + y; } static PyObject *calc_add(PyObject *self, PyObject *args){ int x, y; // Python传入参数 // "ii" 表示传入参数为2个int型参数,将其解析到x, y变量中 if(!PyArg_ParseTuple(args, "ii", &x, &y)) return NULL; return PyLong_FromLong(add(x, y)); } // 模块的方法列表 static PyMethodDef CalcMethods[] = { {"add", calc_add, METH_VARARGS, "函数描述"}, {NULL, NULL, 0, NULL} }; // 模块 static struct PyModuleDef calcmodule = { PyModuleDef_HEAD_INIT, "calc", // 模块名 NULL, // 模块文档 -1, /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ CalcMethods }; // 初始化 PyMODINIT_FUNC PyInit_calc(void) { return PyModule_Create(&calcmodule); }
setup.py

from distutils.core import setup, Extension

module1 = Extension('calc',
                    sources=['calc.c'])

setup(name='calc_model',
      version='1.0',
      description='Hello ?',
      ext_modules=[module1]
)
PS C:\Users\Desktop\my_file\pythonC> C:\python39\python.exe .\setup.py build
running build
running build_ext

用C写的python库现在已经安装成功,进入build下lib的文件夹里会看到一个.pyd的文件

 

 进入到.pyd文件所在目录,就可以成功导入我们用C写的python了.

PS C:\Users\Desktop\my_file\pythonC\build\lib.win-amd64-3.9> C:\python39\python.exe       
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import calc
>>> calc.add(7,9) 
16

如果你想在任何目录下都可以导入,就把这个.pyd copy到C:\python39\Lib\site-packages下即可.

参考: http://www.manongjc.com/detail/51-trghapdrxbmnqvh.html

 

标签:NULL,python,扩展,C语言,int,add,build,calc
From: https://www.cnblogs.com/pfeiliu/p/16888944.html

相关文章

  • python-时间模块-3大常见时间处理模块-datatime(八)
    1.datatime模块datetime是python中处理日期时间的标准库,datetime模块中常用的类包括date,time,datetime,timedelta,使用这些对象支持日期时间的数学运算和更有效的解析......
  • Python 代码托管到码云平台,原来这么简单!!
    一、什么是代码托管?代码托管又有什么好处?场景1:我有2个电脑,公司一台,家里一台。我想在两台电脑上都进行同步开发。这时候我只要gitpush/pull一下就能够同步了,不再需要用U......
  • Python 自动化中三种等待时间的详解
    自动化测试,是交由机器来执行的一种测试手段,用于提升测试效率,意味着每一次的自动化测试都需要有非常高的成功率,才可以达到提升效率的作用。在自动化测试中,其实就是通过代码......
  • Python量化中用pyecharts画K线示例
    首先需要安装Python软件,以及pyecharts库相关教程链接:龙哥量化:文档目录(股票,期货,通达信、同花顺、文华等软件使用,Python量化交易,策略编写,学习文档,策略案例等等) 1"""......
  • python量化指标计算talib函数功能一览表
    安装talib库:pipinstalltalib 1#取个数据验证一下2set_token('')3data=history(symbol='SHSE.600519',frequency='1d',start_time='2015-01-01',......
  • 90 条简单实用的 Python 编程技巧,建议收藏
    编码原则建议1:理解Pythonic概念—-详见Python中的《Python之禅》建议2:编写Pythonic代码避免不规范代码,比如只用大小写区分变量、使用容易混淆的变量名、害怕......
  • python迭代器和生成器
    1.迭代器1.迭代是访问集合的一种方式,可以记住遍历的位置的对象,int类型和容器类对象不可进行迭代1.int类型不可进行迭代例:num=iter(12345)print(nex......
  • 巨蟒python全栈开发django9:一些知识点的汇总
    回顾上周内容:题目:1.人民出版社出版过的所有书籍的名字以及作者的姓名(三种写法,笔记中有两种写法)2.手机以2开头的作者出版过的所有书籍名称以及出版社名称(三种写法,笔记......
  • 巨蟒python全栈开发django3:url&&视图
    1.url正则匹配分组和命名分组2.路由分发3.url别名和反向解析4.httprequest和httpresponse的使用 内容回顾:1.jinja2(flask框架,没有内置模板对象,需要自己用jinja2)......
  • 巨蟒python全栈开发django2:初识django
    今日内容大纲:1.起飞版web框架2.自定制框架的流程3.jinja2模板渲染初识4.MVC&&MTV5.django版本介绍及django安装6.django初识(一些操作) 今日详细内容:1.起飞版web框架2.自......