pybind11 cmake 示例找不到主要功能
pybind11 cmake example cannot find the main function
我git clone
d pybind11's cmake exmaple。然后我用 pip install ./cmake_example
构建了它。我的 python 文件包含以下内容:
import cmake_example
print(cmake_example.add(1, 2))
这很好用。现在我想使用 pybind11
的解释器。我根据 docs 中的说明更改了 CMakeLists.txt
。以下是我现在拥有的:
main.cpp
#include <pybind11/embed.h>
namespace py = pybind11;
int main()
{
py::scoped_interpreter guard{};
py::print("Hello world");
}
PYBIND11_MODULE(cmake_example, m)
{
m.def("main", &main);
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(cmake_example)
add_subdirectory(pybind11)
add_executable(cmake_example src/main.cpp)
target_link_libraries(cmake_example PRIVATE pybind11::embed)
example.py
import cmake_example
cmake_example.main()
当我 运行 上述 python 文件时,出现以下错误:
Traceback (most recent call last):
File "example.py", line 2, in
cmake_example.main()
AttributeError: module 'cmake_example' has no attribute 'main'
我做错了什么?
我认为您正在混合使用两种不同的方法。
嵌入特指将python解释器嵌入到现有的可执行文件中。您所参考的文档使其(或试图)非常清楚。
这意味着您应该有一个 C/C++ 可执行文件,您可以从中执行 python 代码(在文件中或作为字符串)。
既然这已经结束,请查看您构建的目录,您会发现一个 cmake_example 二进制文件。 运行 它,您将看到印刷品。您不能直接从标准 python 解释器中导入此内置模块,而是在从自定义可执行文件调用的文件中可用,在本例中为 cmake_example。
您也可以运行 example.py 更改代码如下:
int main()
{
py::scoped_interpreter guard{};
py::eval_file("example.py");
}
我git clone
d pybind11's cmake exmaple。然后我用 pip install ./cmake_example
构建了它。我的 python 文件包含以下内容:
import cmake_example
print(cmake_example.add(1, 2))
这很好用。现在我想使用 pybind11
的解释器。我根据 docs 中的说明更改了 CMakeLists.txt
。以下是我现在拥有的:
main.cpp
#include <pybind11/embed.h>
namespace py = pybind11;
int main()
{
py::scoped_interpreter guard{};
py::print("Hello world");
}
PYBIND11_MODULE(cmake_example, m)
{
m.def("main", &main);
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(cmake_example)
add_subdirectory(pybind11)
add_executable(cmake_example src/main.cpp)
target_link_libraries(cmake_example PRIVATE pybind11::embed)
example.py
import cmake_example
cmake_example.main()
当我 运行 上述 python 文件时,出现以下错误:
Traceback (most recent call last): File "example.py", line 2, in cmake_example.main() AttributeError: module 'cmake_example' has no attribute 'main'
我做错了什么?
我认为您正在混合使用两种不同的方法。
嵌入特指将python解释器嵌入到现有的可执行文件中。您所参考的文档使其(或试图)非常清楚。
这意味着您应该有一个 C/C++ 可执行文件,您可以从中执行 python 代码(在文件中或作为字符串)。
既然这已经结束,请查看您构建的目录,您会发现一个 cmake_example 二进制文件。 运行 它,您将看到印刷品。您不能直接从标准 python 解释器中导入此内置模块,而是在从自定义可执行文件调用的文件中可用,在本例中为 cmake_example。
您也可以运行 example.py 更改代码如下:
int main()
{
py::scoped_interpreter guard{};
py::eval_file("example.py");
}