ModuleNotFoundError при выполнении скрипта Python из приложения C ++ - PullRequest
0 голосов
/ 20 февраля 2019

Я использую python для обработки некоторых .obj файлов, которые мне нужны в моем приложении opengl / c ++.Мой скрипт называется boundingBox.py, а функция внутри него называется getBoundingBox(filename).Вот код, который я пытался использовать:

Py_Initialize();

const char* module = "./scripts/boundingBox.py";
const char* function = "getBoundingBox";
PyObject* moduleStr = PyUnicode_FromString(module);
PyObject* myModule = PyImport_Import(moduleStr);

if (myModule != NULL) {
    PyObject* myFunction = PyObject_GetAttrString(myModule, function);

    if (myFunction && PyCallable_Check(myFunction)) {
        //executing the function to obtain 2 bounding boxes
        const char* filename1 = "./models/tree.obj";
        const char* filename2 = "./models/farmhouse.obj";

        PyObject* file1 = PyUnicode_FromString(filename1);
        PyObject* arg1 = PyTuple_Pack(1, file1);
        PyObject* myResult1 = PyObject_CallObject(myFunction, arg1);

        if (PyTuple_Check(myResult1)) {
            cout << "successfully got bounding box 1" << endl;
        }

        PyObject* file2 = PyUnicode_FromString(filename2);
        PyObject* arg2 = PyTuple_Pack(1, file2);
        PyObject* myResult2 = PyObject_CallObject(myFunction, arg2);

        if (PyTuple_Check(myResult2)) {
            cout << "successfully got bounding box 2" << endl;
        }
    }
    else {
        PyErr_Print();
    }

}
else {
    PyErr_Print();
}

Есть несколько проблем, с которыми я сталкиваюсь, и документация, а также другие вопросы по SO, похоже, не помогают ...

  • Я не знаю, какой у меня текущий рабочий каталог, я предполагаю, что именно поэтому "boundingBox.py" не может быть найден.
  • Я не знаю, как получить доступ к файлам .objиз интерпретатора Python.
  • Мне нужно решение, которое будет работать не только на моем компьютере, но и на компьютере моего профессора, когда я отправляю ему проект, без необходимости вносить какие-либо изменения в его компьютер.

В настоящее время структура проекта выглядит следующим образом (каждое имя является каталогом, если у него нет формата файла):

>lab03:
    >>build
    >>external
    >>common
    >>lab03:
        >>>models
            >>>> tree.obj
            >>>> farmhouse.obj
        >>>scripts
            >>>> boundingBox.py
        >>>lab03.exe

Когда меня учили c, и я хотел открытьфайл, он должен был находиться в том же каталоге, поэтому в этом предположении я использовал пути относительно пути исполняемого файла.Видимо, я был неправ, но я не могу понять, как это исправить.Любая помощь с благодарностью.

...