c++ - 使用 Py++ 生成的代码作为 Python 扩展

标签 c++ python word-wrap py++

我需要包装现有的 C++ 库以便在 Python 中使用。阅读完 this answer on choosing an appropriate method to wrap C++ for use in Python 后,我决定使用 Py++。

我使用教程文件遍历了 tutorial for Py++ ,并在 generated.cpp 中得到了预期的输出,但我还没有想出如何才能实际使用生成的代码作为扩展,我可以在 Python 中导入。我确定我现在必须编译代码,但是用什么?我应该使用 bjam 吗?

最佳答案

Py++ 为您生成与 boost::python 一起使用的语法,以在您的应用程序中生成 python 入口点。 假设 Py++ 一切顺利,您需要下载 Boost 框架,并将 boost 包含目录和 boost::python 库添加到您的项目,然后使用 Py++ 生成的 cpp 进行编译。

您可以为您的项目使用任何您想要的构建系统,但 boost 是使用 bjam 构建的。您需要选择是要静态库还是动态 boost python 库,然后按照构建 boost 的说明进行操作 here .

如果在 Windows 上,您需要将构建库的扩展名从 .dll 更改为 .pyd。是的,它需要是一个库项目,这不适用于可执行文件。

然后,将 pyd 放在您机器上的 python 可以找到它的地方,然后进入 python 并执行 import [Your-library-name],希望一切正常。

最后一点,在这个宏的generated.cpp中给出的名字:

BOOST_PYTHON_MODULE( -name- )

需要是您的项目的确切名称,否则 python 会报错。

不到一个月前我才经历过这一切,所以我知道其中的困惑。

为了使我的 python 扩展在构建库和测试时非常易于使用,我做了一件事,就是在我的构建环境中自己构建 boost::python 和 python。这样 pyd 就在我想要的地方结束,用户不需要安装 python 来运行我的扩展。不过,这对于您正在做的事情来说可能有点矫枉过正。

编辑: 如果你想让你的扩展在机器上轻松安装和编译,请查看 python 的 setuptools .只需几行简单的代码,你就可以让 python 为你编译和安装你的包。不过,它的一个缺点是它与我们这些喜欢在 Visual Studio 中开发的人不兼容。

关于c++ - 使用 Py++ 生成的代码作为 Python 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2169948/

相关文章:

c++ - 什么是断言?你为什么要使用它们?

c++ - 将 C++ LPCWSTR 打印到文件

python - 如何在html中使用客户过滤器? django(带数字的循环)

css - Firefox - CSS 断字 : break-all unstable

java - 如何使 JavaFX 文本换行工作?

c++ - VxWorks spyLib 的可变函数指针定义不清楚

c++ - 使用连续的 cin >> 输入循环

python - 为什么 python 执行代码看起来是乱序的?

python - 字典将列表中的字符串映射到 Python 中的数字

css - 使用 .css 格式化文本框(输入字段)中的文本