使用cmake和pybind11构建示例应用程序时找不到Python.h

4

我想用pybind11构建一个简单的应用程序,我的Ubuntu系统上已经安装了pybind和cmake(以及make install)。我使用了这个简单的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可用)

3个回答

5

请问第二种情况你能具体说明一下吗? - Stepan Yakovenko
请查看参考页面,特别是target_link_libraries(example PRIVATE pybind11::embed)语句。 - Wenzel Jakob

2

在跟随Wenzel Jakob答案后,我想提供一个CMakeLists.txt示例来编译这个教程中提供的例子:

// 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

附注:我还编写了一些指南(这里),用于编译/安装pybind11


@StepanYakovenko 不用谢。实际上,感谢你和温泽尔提供答案。 :) - Foad S. Farimani

0

也许只需要安装Python头文件?例如,在Ubuntu上,您可以安装sudo apt-get install python-dev(或python3-devpythonX.Y-dev)软件包。这可能会解决此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接