简单pybind11模块失败,没有名为的模块

Simple pybind11 module fails with No module named

本文关键字:模块 pybind11 失败 简单      更新时间:2023-10-16

不久前,我为我的一个项目创建了一个python绑定,现在我想再次使用它。绑定不再工作,因为python无法再导入它——这一切在当时都很好。

然后我决定把它分解成一个最简单的例子:

绑定.cpp

#include <pybind11/pybind11.h>
int add(int i, int j) {
return i + j;
}
PYBIND11_MODULE(TestBinding, m) {
m.doc() = "pybind11 example plugin"; // optional module docstring
m.def("add", &add, "A function which adds two numbers");
}

CMakeLists.txt:

cmake_minimum_required( VERSION 3.2 )
project(TestBinding)
add_subdirectory(pybind11)  # or find_package(pybind11)
pybind11_add_module(TestBinding binding.cpp)
# Configure project to inject source path as include directory on dependent projects
target_include_directories( TestBinding
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/pybind11/include/> )
set_target_properties( TestBinding
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
PREFIX ""
SUFFIX ".so"
)

然后我有一个非常简单的test.py文件,如下所示:

sys.path.insert(0, "/path/to/so/lib/")
from TestBinding import *

一旦执行,总是会给我以下错误:

from TestBinding import *
ModuleNotFoundError: No module named 'TestBinding'

我真的不知道这个世界从它运行良好的时候到现在会发生什么变化。

以下是关于我工作环境的更多信息:

  • Windows 10
  • Visual Studio 15 2017 Win64
  • Python 3.7(也尝试过3.5和3.6(

我错过了什么真正明显的东西吗?

我和你有同样的问题。经过检查,发现问题是由pybind11的python版本与本地环境的python版本不一致引起的。当我调整到相同的python版本时,我的问题得到了解决。

我已经能够通过从CMakeLists.txt中删除SUFFIX ".so"规则来解决此问题。这在我最初创建绑定时是需要的,但现在显然不再需要了。