从C ++应用程序执行python脚本时发生ModuleNotFoundError

时间:2019-02-20 18:32:23

标签: python c++ embed

我正在使用python处理我的opengl / c ++应用程序中需要的一些.obj文件。我的脚本称为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"的原因。
  • 我不知道如何从python解释器中访问.obj文件。
  • 我需要一种不仅可以在我的计算机上运行的解决方案,而且还可以在教授发送项目时在教授的计算机上运行,​​而无需对他的计算机进行任何更改。

当前项目的结构如下(每个名称均为目录,除非具有文件格式):

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

当我教c并想打开一个文件时,它必须位于同一目录中,因此在这种假设下,我使用了相对于可执行文件路径的路径。显然我错了,但是我不知道如何解决它。任何帮助将不胜感激。

0 个答案:

没有答案