目前我使用 CMake+Pybind11 来封装 Python 接口,在封装过程中我发现一个问题,如果我使用的 python 环境为 3.7 ,那么封装后的 pyd 库只能在 3.7 的解释器下面运行,如果在 3.8 或者其他版本下 import 的时候会报 DLL 错误。目前打算支持 3.7 以上的 python 版本,那么请教各位大佬如何处理这种版本不兼容的问题?
1
lovelylain 2023-10-20 18:07:26 +08:00 via Android 1
python 扩展一直都是这样的,要针对特定 python 版本单独编译,因为不同版本 api 可能有差异,不想放出源码让用户安装时编译的话你就预先编译好所有期望平台期望版本的 wheel 包。
|
2
nightwitch 2023-10-20 20:52:57 +08:00 1
|
3
ysc3839 2023-10-20 22:10:42 +08:00 via Android 1
只能单独编译。或者你可以直接调 Python 的 C 接口,有一套好像叫 Python min 还是 Python base 的接口?可以整个大版本通用,但是会缺少很多新功能,写起来超级麻烦,反正 pybind11 是用不了的。
|
4
aisk 2023-10-20 22:57:19 +08:00 1
如果接口交互简单,直接用 ctypes / cffi 调用暴露出来的 C 接口,然后发布一个 .so ,最简单。
|
5
ysc3839 2023-10-21 00:42:18 +08:00 via Android
@ysc3839 找到了,是叫 Limited API https://docs.python.org/3/c-api/stable.html#limited-c-api
|