Boost-Python C++ 项目构建,如何使用 Python 中的新库?

Posted

技术标签:

【中文标题】Boost-Python C++ 项目构建,如何使用 Python 中的新库?【英文标题】:Boost-Python C++ project builds, How to use the new library from Python? 【发布时间】:2016-12-12 16:18:03 【问题描述】:

我有一个 VS12 项目,并使用 boost-python 向 Python 公开了一些类。在一些链接问题之后,我的项目最终正确构建并生成MySDK.libMySDK.dll。我将 Boost Python 模块称为与库相同的名称,即BOOST_PYTHON_MODULE(MySDK)。这些.lib.dll 是我需要在Python 中使用MySDK 的全部吗?

我正在使用 Pycharm 社区,但找不到将生成的 MySDK.libMySDK.dll 作为 Python 库模块导入的方法。

遗憾的是,没有太多关于 Boost Python 编码练习后该做什么的信息。

【问题讨论】:

这个问题提出了一个类似的问题:***.com/questions/27842074/… 你能让你的在 PyCharm 之外工作吗? 实际上比这更糟。将 lib 和 dll 位置添加到我的 Path 变量后。我去命令行运行python解释器,这就是我得到的:ImportError: No module named MySDK 是否在 PyCharm 中? @doctorlove 现在一切都好,谢谢! 【参考方案1】:

我将我的 VS12 项目输出文件扩展名更改为 .pyd (Right Click on Project -> Properties -> Linker -> General -> Output File -> changed to $(OutDir)$(TargetName).pyd),现在我可以从命令行加载 Python 库,但仍然不能从 Pycharm 加载。

之后,将.pyd(以及.lib.dll)所在的目录设置在Path 变量下。然后 Pycharm 能够成功加载并运行我的自定义 boost-python 库。

更新 Python 理解并可以加载的 pyd 只是将 dll 重命名为 pyd。因此,一种更简洁的方法是将 VS12 项目保留为生成原始 $(OutDir)$(TargetName)$(TargetExt)dll 输出,并简单地添加一个 Post-Build Eventdll 复制到 pyd 中:

(Right Click on Project -> Properties -> Configuration Properties -> Build Events -> Post-Build Event -> Command Line) 并添加copy $(OutDir)$(TargetName)$(TargetExt) $(OutDir)$(TargetName).pyd

【讨论】:

以上是关于Boost-Python C++ 项目构建,如何使用 Python 中的新库?的主要内容,如果未能解决你的问题,请参考以下文章

boost-python:如何提供自定义构造函数包装函数?

如何将 kwargs 传递给 boost-python 包装函数?

如何在构建之前使CMake运行python脚本,以便为我的项目生成文件以在构建中使用?

结合 CMakeLists.txt、boost-python 和 python setuptools

通过 Boost Python 将 Python 函数转换为 C++,用作回调

如何使 cmake 将 D 参数传递给 ar 以可重现地构建静态库