Python.h 在使用 cmake 和 pybind11 构建示例应用程序时未找到
Python.h not found while building sample application with cmake and pybind11
我想用 pybind11 构建简单的应用程序,pybind 已经用 cmake(和 make install)安装在我的 Ubuntu 系统中。我使用这个简单的 cmake 文件:
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(trt_cpp_loader )
find_package(pybind11 REQUIRED)
add_executable(trt_cpp_loader main.cpp)
set_property(TARGET trt_cpp_loader PROPERTY CXX_STANDARD 11)
这是main.cpp:
#include <iostream>
#include <pybind11/embed.h>
namespace py = pybind11;
using namespace std;
int main(){return 0;}
当我构建它时,我得到:
In file included from /usr/local/include/pybind11/pytypes.h:12:0,
from /usr/local/include/pybind11/cast.h:13,
from /usr/local/include/pybind11/attr.h:13,
from /usr/local/include/pybind11/pybind11.h:44,
from /usr/local/include/pybind11/embed.h:12,
from /home/stiv/lpr/trt_cpp_loader/main.cpp:2:
/usr/local/include/pybind11/detail/common.h:112:10: fatal error: Python.h: No such file or directory
#include <Python.h>
^~~~~~~~~~
compilation terminated.
我该如何解决这个问题? (python-dev 和 python3-dev 已经安装,Python.h 可用)
对于创建扩展模块的默认情况,您需要使用 pybind11_add_module
命令(参见 https://pybind11.readthedocs.io/en/stable/compiling.html#building-with-cmake)。
如果目标确实是将 Python 嵌入到可执行文件中,则您有责任将 python headers 和库显式添加到 CMake 中的 compiler/linker 命令. (请参阅 https://pybind11.readthedocs.io/en/stable/compiling.html#embedding-the-python-interpreter 了解如何操作)
继Wenzel Jakob's I want to put an example of CMakeLists.txt
for compiling the example provided in this tutorial之后:
// example.cpp
#include <pybind11/pybind11.h>
int add(int i, int j) {
return i + j;
}
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin"; // optional module docstring
m.def("add", &add, "A function which adds two numbers");
}
和
# example.py
import example
print(example.add(1, 2))
和
# CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(example)
find_package(pybind11 REQUIRED)
pybind11_add_module(example example.cpp)
现在在根目录中 运行
cmake .
make
现在 运行 python 代码由
python3 example.py
P.S. 我也为 compiling/installing 和 pybind11
写了一些说明 。
也许只需安装 Python headers?例如,在 Ubuntu 上,您可以安装 sudo apt-get install python-dev
(或 python3-dev
或 pythonX.Y-dev
)包。这可以解决这个问题。
我想用 pybind11 构建简单的应用程序,pybind 已经用 cmake(和 make install)安装在我的 Ubuntu 系统中。我使用这个简单的 cmake 文件:
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(trt_cpp_loader )
find_package(pybind11 REQUIRED)
add_executable(trt_cpp_loader main.cpp)
set_property(TARGET trt_cpp_loader PROPERTY CXX_STANDARD 11)
这是main.cpp:
#include <iostream>
#include <pybind11/embed.h>
namespace py = pybind11;
using namespace std;
int main(){return 0;}
当我构建它时,我得到:
In file included from /usr/local/include/pybind11/pytypes.h:12:0,
from /usr/local/include/pybind11/cast.h:13,
from /usr/local/include/pybind11/attr.h:13,
from /usr/local/include/pybind11/pybind11.h:44,
from /usr/local/include/pybind11/embed.h:12,
from /home/stiv/lpr/trt_cpp_loader/main.cpp:2:
/usr/local/include/pybind11/detail/common.h:112:10: fatal error: Python.h: No such file or directory
#include <Python.h>
^~~~~~~~~~
compilation terminated.
我该如何解决这个问题? (python-dev 和 python3-dev 已经安装,Python.h 可用)
对于创建扩展模块的默认情况,您需要使用 pybind11_add_module
命令(参见 https://pybind11.readthedocs.io/en/stable/compiling.html#building-with-cmake)。
如果目标确实是将 Python 嵌入到可执行文件中,则您有责任将 python headers 和库显式添加到 CMake 中的 compiler/linker 命令. (请参阅 https://pybind11.readthedocs.io/en/stable/compiling.html#embedding-the-python-interpreter 了解如何操作)
继Wenzel Jakob's CMakeLists.txt
for compiling the example provided in this tutorial之后:
// example.cpp
#include <pybind11/pybind11.h>
int add(int i, int j) {
return i + j;
}
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin"; // optional module docstring
m.def("add", &add, "A function which adds two numbers");
}
和
# example.py
import example
print(example.add(1, 2))
和
# CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(example)
find_package(pybind11 REQUIRED)
pybind11_add_module(example example.cpp)
现在在根目录中 运行
cmake .
make
现在 运行 python 代码由
python3 example.py
P.S. 我也为 compiling/installing 和 pybind11
写了一些说明
也许只需安装 Python headers?例如,在 Ubuntu 上,您可以安装 sudo apt-get install python-dev
(或 python3-dev
或 pythonX.Y-dev
)包。这可以解决这个问题。