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

时间:2019-11-11 04:47:43

标签: python c++ pybind11

一段时间前,我已经为我的一个项目创建了python绑定,而现在想再次将其拾取。 绑定不再起作用,因为python不再能够导入它-那时一切正常。

然后我决定将其分解为最简单的示例:

binding.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)

我真的缺少任何明显的东西吗?

1 个答案:

答案 0 :(得分:0)

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