Простой модуль pybind11 завершается неудачно, модуль без имени - PullRequest
0 голосов
/ 11 ноября 2019

Некоторое время назад я создал привязку 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 голосов
/ 11 ноября 2019

Я смог решить эту проблему, удалив правило SUFFIX ".so" из моего CMakeLists.txt. Это было необходимо еще тогда, когда я изначально создавал свои привязки, но это больше не очевидно.

...