use*_*269 12 c++ python pybind11
我有以下目录布局
awesome_package
\- module1.py
\- build
\- module2.so
Run Code Online (Sandbox Code Playgroud)
我目前导入module1为
import awesome_package.module1
Run Code Online (Sandbox Code Playgroud)
和module2为
import sys
sys.path.append('path/to/awesome_package/build')
import module2
Run Code Online (Sandbox Code Playgroud)
但我希望能够使用以前的语法.
module2由pybind11以如下方式创建:
PYBIND11_MODULE(module2, module2) {
module2.doc() = "C++ module wrapped for Python";
module2.def("some_cpp_function", some_cpp_function)
}
Run Code Online (Sandbox Code Playgroud)
正如我在评论中所说,二进制Python模块通常用distutils/ 构建setuptools.为此,您需要编写setup.py包含所有必要选项的脚本.以下是一个非常简单的示例,仅显示基本内容:
from setuptools import setup, Extension
setup(
name = 'awesome',
version = '0.0.1',
packages = ['awesome_package']
ext_modules = [Extension(
'awesome_package.module2',
['src/module2.cpp']
)]
)
Run Code Online (Sandbox Code Playgroud)
当然,setup.py您需要指定所有构建选项,如头文件,编译器标志等.
如果您坚持使用CMake,则需要添加自定义复制命令以复制包中的已编译模块.像这样的东西:
add_custom_command(TARGET module2 POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:module2>
"${CMAKE_SOURCE_DIR}/awesome_package"
)
Run Code Online (Sandbox Code Playgroud)