Ole*_*ikh 6 python swig python-3.x
SWIG 为 Python 模块生成两个包装层:C 包装器代码和 Python 包装器代码。而且,据我所知,两者都与 Python 3.x(目前为 3.1-3.6)的特定颠覆无关。
然而,编译代码时,我必须包括Python的具体3.x版,其中包括在特定的库版本的标题PyConfig.h,例如3.4:pragma comment(lib,"python34.lib")-其结果是必须找到和负载的Python包python34.dll在运行时,任何其他版本的加载都会失败。
但是所有 3.x 版本都兼容并且对生成的.pyd二进制文件进行简单编辑- 用python34.dllsay替换python36.dll使最终模块与 Python 3.6 一起工作就好了。
有什么方法可以使用 SWIG 创建 Python 3.x 包,以便能够搜索并找到系统上安装的任何可用 3.x 版本?
您可以“强制”链接您的项目,python3.lib而不是链接到python3X.lib(X次要版本在哪里)。然后,包装器将python3.dll作为其导入的一部分,并将python3.dll转发到python3X.dll.
但是,请注意,您使用的 API 需要来自 Python 3 API 的通用集(我相信从 3.2 开始,请参阅下面的参考资料)。如果您需要使用 3.2 上不存在但 3.3 及以上版本中存在的 API,您的 SWIG 包装器仍将链接到次要库。
例如,如果您正在使用PyUnicode_AsUTF8或PyUnicode_AsUTF8AndSize从 Python 3.3 开始存在,然后您尝试编译 3.6 和 3.7 的包装器,尽管这些 API 对于这两个版本都很常见,但它们将作为python36.dll和python37.dll导入的一部分包含在内。
参考:PEP 384
| 归档时间: |
|
| 查看次数: |
1048 次 |
| 最近记录: |