Так что получается, что моя проблема - это простой случай, когда путь поиска модуля не был правильно задан при инициализации из C ++.
Из вступления к документации по Python:
В большинстве систем (в частности, в Unix и Windows, хотя
детали немного разные), Py_Initialize () вычисляет модуль
путь поиска, основанный на его наилучшем предположении о местонахождении стандарта
Исполняемый файл интерпретатора Python, при условии, что библиотека Python
находится в фиксированном месте относительно интерпретатора Python
исполняемый файл. В частности, он ищет каталог с именем
lib / pythonX.Y относительно родительского каталога, где исполняемый файл
именованный python находится в пути поиска команд оболочки (
переменная окружения PATH).
Итак, это означает, что путь поиска модуля никоим образом не указывает на текущий рабочий каталог, скорее он указывает на папку установки системного python.
Решением для меня было правильно задать путь поиска модуля, чтобы он указывал на текущий рабочий каталог. Для этого вам нужно инициализировать python, а затем извлечь значение sys.path и добавить любые дополнительные пути. Извините за использование поддержки, если вы не в этом; Вы должны легко увидеть, как заменить любую желаемую строку.
Py_Initialize();
// now time to insert the current working directory into the python path so module search can take advantage
// this must happen after python has been initialised
boost::filesystem::path workingDir = boost::filesystem::absolute("./").normalize();
PyObject* sysPath = PySys_GetObject("path");
PyList_Insert( sysPath, 0, PyString_FromString(workingDir.string().c_str()));