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

标签 python c++ pybind11

不久前,我为我的一个项目创建了一个 python 绑定(bind),现在想再次使用它。
绑定(bind)不再起作用,因为 python 不再能够导入它 - 这一切都在当时工作正常。

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

绑定(bind).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'

我真的不知道世界上会发生什么变化,从它工作得很好到现在。

以下是有关我的工作环境的更多信息:
  • window 10
  • Visual Studio 15 2017 Win64
  • Python 3.7(也尝试过 3.5 和 3.6)

  • 我错过了什么非常明显的东西吗?

    最佳答案

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

    关于python - 简单的 pybind11 模块失败,没有命名模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58795698/

    相关文章:

    python - 如何使用 sys.path_hooks 自定义加载模块?

    python - 如何使包含文件路径的Python脚本独立可执行且可导入?

    c++ - 我如何在 GTK 中获得键盘和鼠标输入?

    C++ : Storing weight for larger Graph

    python - 使用 pybind11 链接其他共享库构建库

    python - 如何将 PyTorch 张量转换为 C++ torch::Tensor,反之亦然?

    python - 无法安装 PyDev eclipse 插件

    python - 从Python中表示Unicode代码点的字符串获取Unicode字符?

    c++ - 如何避免 'implicit' 在 std::pair 中调用单参数构造函数

    c++ - Python bool 转换为 C++ (pybind11)