Это может быть тривиально, но я застрял здесь.
У меня есть следующие настройки:
entity.cpp/.hpp
: содержит определение и реализацию моего класса Entity.
entity_wrap.cpp
: мой файл-обертка для python, который я компилирую в entity.so
entity_test.cpp
: тестовый файл
Что бы я хотел сделать в entity_test.cpp
, это следующее:
Py_SetProgramName(argv[0]);
Py_Initialize();
...
Entity* entity = new Entity;
globals["entity"] = entity;
Теперь я получаю следующее исключение:
TypeError: No to_python (by-value) converter found for C++ type: Entity
Что очевидно, так как я не загружаю определение преобразования моих типов. Теперь я попытался загрузить entity.so
с помощью globals["entity_module"] = import("entity");
, но столкнулся с этим исключением:
ImportError: No module named entity
Я могу загрузить модуль из оболочки Python, как и ожидалось.
Теперь у меня вопрос: как загрузить преобразователи, определенные в entity_wrap.cpp
?
Решение
Как указано eudoxos , я должен убедиться, что модуль, который я хочу загрузить, находится в sys.path
:
globals["sys"] = import("sys");
exec("sys.path.append('/path/to/my/module')\n"
"import entity", globals);
Теперь он работает как шарм. Видимо просто использования Py_SetProgramName(argv[0]);
было недостаточно.