请教一下各位 V 友关于 Pybind11 封装 Python 接口, pyd 库对于各个版本的 Python 的兼容问题

214 天前
 KADGang

目前我使用 CMake+Pybind11 来封装 Python 接口,在封装过程中我发现一个问题,如果我使用的 python 环境为 3.7 ,那么封装后的 pyd 库只能在 3.7 的解释器下面运行,如果在 3.8 或者其他版本下 import 的时候会报 DLL 错误。目前打算支持 3.7 以上的 python 版本,那么请教各位大佬如何处理这种版本不兼容的问题?

993 次点击
所在节点    Python
5 条回复
lovelylain
214 天前
python 扩展一直都是这样的,要针对特定 python 版本单独编译,因为不同版本 api 可能有差异,不想放出源码让用户安装时编译的话你就预先编译好所有期望平台期望版本的 wheel 包。
nightwitch
214 天前
做不到,Python 的通病。
https://pypi.org/project/numpy/#files
可以看一下 numpy 打一个版本要打多少种不同的变体
ysc3839
214 天前
只能单独编译。或者你可以直接调 Python 的 C 接口,有一套好像叫 Python min 还是 Python base 的接口?可以整个大版本通用,但是会缺少很多新功能,写起来超级麻烦,反正 pybind11 是用不了的。
aisk
214 天前
如果接口交互简单,直接用 ctypes / cffi 调用暴露出来的 C 接口,然后发布一个 .so ,最简单。
ysc3839
214 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/983880

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX