python - Python如何调用C?
问题描述
Python 究竟如何调用 C 库?例如,我相信 Tensorflow 主要是用 C 编写的,但可以从 Python 中使用。我正在考虑用我自己的(解释的)编程语言(用 Go 编写,但我认为这将是一个类似的过程)实现类似的东西。
当 Python 程序调用 C 函数时会发生什么?我在考虑 RPC 或 DLL,但它们似乎都不太可能。
解决方案
cPython主要有两种调用C代码的方式:加载共享库并调用其符号,或者将C代码打包为Python二进制模块,然后像普通Python模块一样从Python代码中调用它们,这就是高性能标准库中的东西已实现 - 例如json。
使用模块加载共享库并从中调用函数ctypes
相当简单,您可以在这里找到很多示例:https ://docs.python.org/2/library/ctypes.html
将 C 代码打包为二进制 Python 模块需要大量样板文件并仔细注意引用计数、空指针等细节,并在此处记录:https ://docs.python.org/2/extending/extending.html
有几个库可以自动执行该过程并为您生成绑定代码。一个例子是boost.python
: https ://www.boost.org/doc/libs/1_65_0/libs/python/doc/html/tutorial/index.html
推荐阅读
- sql - 相同的 SQL 查询适用于某些表,但在同一数据库中相同的其他表上出错
- google-apps-script - 我想在 Google Sheet 宏中使用 Autocrat
- javascript - 为 Lightbox 图像 ejs 动态显示图像
- java - 传递给方法的这个 Java 数组发生了什么?
- django - 将 api 密钥保存到数据库 django
- python-3.x - 如何解决 DataFrame 中的数据过滤挑战?
- java - 如何向导航抽屉项目添加操作?
- laravel - Laravel 8 API 子域无法访问
- sql - TSQL - 查询差异和聚合重叠
- razor - 剃刀文件中的覆盖方法“消失”