如何使用 Pybind11 从现有 C++ 包创建 Python 扩展,包括 .dll、.h 文件?
How to create Python extension from existing C++ packages include .dll, .h files using Pybind11?
我正在尝试将 C/C++ API 包转换为 Python 扩展。我已成功通过 this visual studio tutorial。这是一个简单的教程,对于真正的转换可能不是很实用。
这是我的任务。我有 include 文件夹,一个包含 *.dll 和 *.lib 文件的文件夹,以及一些演示 cpp 文件。
问题1:*.dll和*.lib文件夹放在哪里?
按照 visual studio 教程,我创建了一个 C++ 项目。在发布并构建项目之前,我在哪里可以将*.dll 和*.lib 文件放入项目中?
问题2:有没有办法导入C++函数并批量分类?
要使用 pybind11,我们需要在 cpp 文件的底部添加以下代码。
namespace py = pybind11;
PYBIND11_MODULE(superfastcode2, m) {
m.def("fast_tanh2", &tanh_impl, R"pbdoc(
Compute a hyperbolic tangent of a single argument expressed in radians.
)pbdoc");
以上示例代码是将 cpp 中的 "tanh_impl" 映射到 python 中的 "fast_tanh2" module.But 我有许多函数和演示 cpp 文件中的 类 .我必须将它们一张一张地映射吗?我可以批量映射它们吗?
问题 3:我可以将哪些文件复制到另一台计算机?
我创建了 setup.py,它可以从本地 conda 环境导入。我在文件夹视图中有很多文件夹
我不想在另一台电脑上重新构建一次,我可以复制哪些文件并移动到另一台电脑?
我搜索了一下,pybind11和VS的详细例子不多,所以在这里求助
先谢谢你。
1) dll 需要使用 python 扩展名(见下文)打包,并且很可能安装在同一文件夹中。
2) 不,你需要单独包装它们。这不像听起来那么费力,而且即使可以使用某种批处理,您仍然需要全部指定它们。
3) 这个问题是关于包装的。您的 setup.py
可能基于 setuptools which can be used to create wheels that can be installed with pip
without having to rebuild each time. Anaconda also has its own package management 系统。
我正在尝试将 C/C++ API 包转换为 Python 扩展。我已成功通过 this visual studio tutorial。这是一个简单的教程,对于真正的转换可能不是很实用。
这是我的任务。我有 include 文件夹,一个包含 *.dll 和 *.lib 文件的文件夹,以及一些演示 cpp 文件。
问题1:*.dll和*.lib文件夹放在哪里?
按照 visual studio 教程,我创建了一个 C++ 项目。在发布并构建项目之前,我在哪里可以将*.dll 和*.lib 文件放入项目中?
问题2:有没有办法导入C++函数并批量分类?
要使用 pybind11,我们需要在 cpp 文件的底部添加以下代码。
namespace py = pybind11;
PYBIND11_MODULE(superfastcode2, m) {
m.def("fast_tanh2", &tanh_impl, R"pbdoc(
Compute a hyperbolic tangent of a single argument expressed in radians.
)pbdoc");
以上示例代码是将 cpp 中的 "tanh_impl" 映射到 python 中的 "fast_tanh2" module.But 我有许多函数和演示 cpp 文件中的 类 .我必须将它们一张一张地映射吗?我可以批量映射它们吗?
问题 3:我可以将哪些文件复制到另一台计算机?
我创建了 setup.py,它可以从本地 conda 环境导入。我在文件夹视图中有很多文件夹
我不想在另一台电脑上重新构建一次,我可以复制哪些文件并移动到另一台电脑?
我搜索了一下,pybind11和VS的详细例子不多,所以在这里求助
先谢谢你。
1) dll 需要使用 python 扩展名(见下文)打包,并且很可能安装在同一文件夹中。
2) 不,你需要单独包装它们。这不像听起来那么费力,而且即使可以使用某种批处理,您仍然需要全部指定它们。
3) 这个问题是关于包装的。您的 setup.py
可能基于 setuptools which can be used to create wheels that can be installed with pip
without having to rebuild each time. Anaconda also has its own package management 系统。