python如何调用c代码_python的库,比如numpy是如何调用C语言实现的代码的?

挺简单的,Python的官方文档中有专门一个叫Python/C API的文档,是Python暴露给用户来编写模块的api,是用纯c语言的,直接编译生成dll或so动态链接库,改扩展名为pyd就可以放到python目录下的DLL文件夹里,在Python里直接import就行。

用这种方式你就基本能彻底理解Python中一切皆对象的概念,所有的所有都是一个叫PyObject的东西,就连代码块都是一个叫PyCode的东西。也会让你逐渐注意到Python的垃圾回收机制里引用计数的东西,每次处理PyObject都需要考虑引用计数要不要加1,什么时候加1,这些都是手动的。

看了其他回答,有用cpython来调c++动态链接库的,傻子才会这么干,low的一批。有用boost Python的,那玩意最近貌似不支持跨python版本了,其实boost Python就是对Python/C api进行的封装。

之前发现Python的pymysql模块是用Python写的,担心其性能,速度有问题,打算用c++写,就用了boost python库,结合MySQL的c++ api,成功写成了模块。后来测试时发现,boost Python在编译的时候用的是我电脑中的python 3.7的环境,编译时链接的是python37.lib,而不是python.lib,导致其他版本的python不能使用boost python编写的python模块。查资料发现编译boost可以通过配置来指定为全版本的python,但发现没有用,文章太老,已经不适合现在的boost。可能是我太菜了,还是编译不出来全python版本的boost python。就放弃了,以后一直都用原生的c语言api。

最近发现opencv里写python模块的部分用的就是python原生api,好亲切。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值