Skip to content

Latest commit

 

History

History
80 lines (43 loc) · 2.17 KB

README_zh-cn.md

File metadata and controls

80 lines (43 loc) · 2.17 KB

go-python3-submodule

English (稀烂_(ˊཀˋ」∠)_) | 简体中文

子模块风格的 Go Python3/C API 绑定。

此物源自另一个有生之年工程的拆分, 尝试将DataDog/go-python3改造更加面向对象与强类型未果, 经历合久必分, 分久必合, 反复折腾后只余构建速度催人泪下。

阿库娅大人说: "阿库西斯教徒都是努力的人, 就算失败了也是世界的错!遇到困难先跑路, 大不了弃坑。"

我老婆说: "我讨厌的事有三件『办不到、好累、好麻烦』这三句话非常不好, 会抹杀人类所拥有的无限可能。"

历史的倒车再次启动, 分离子模块, 先完成API绑定。

安装

Go Modules

go get github.com/M-Quadra/go-python3-submodule/v11
Python version Package URL
3.11 github.com/M-Quadra/go-python3-submodule/v11
3.10 github.com/M-Quadra/go-python3-submodule/v10
3.9 github.com/M-Quadra/go-python3-submodule/v9
3.8 github.com/M-Quadra/go-python3-submodule/v8

使用

调用方式同Python/C API方法, 如PyBool_Check(x)使用pybool.Check(x)调用, 包名补全交给gopls。

方法名针对数据类型做了部分转换, 具体如下:

Python/C API Go
PyFloat_AsDouble pyfloat.AsFloat64
PyLong_AsLong pylong.AsInt
PyLong_AsLongLong pylong.AsInt64
... ...

如遇卡死, 建议排查GIL或引用计数

协程调用有2种方式: example-0 , example-1

个人偏好example-0

开发环境: macOS (x86-64)

运行目标: Linux (Docker x86-64)

已迁移DataDog/go-python3的大部分方法, 当然还有些小问题龟速修复中...

测试用例大部分添加了引用计数检查。

已知不同环境会有所差异, 适配目标为通过单元测试

  • PyModule_GetDef涉及到结构体转换, 目前搁置。
  • Py_Main调用卡死, 先注释掉, 随缘解决。

  • Exception的单元测试添加引用计数检查。不过目前没搞懂, 摸了
  • GitHub Action
  • 详细教程