即使设置了系统路径,PyImport_ImportModule也始终返回NULL

时间:2018-03-07 04:34:44

标签: python c++ embedding

我正在尝试在Ubuntu 17.10中编写一个简单的C / C ++程序来使用embedding调用python函数。但是,它总是抱怨它无法使用PyImport_ImportModule导入模块。

我已将Python.h包含在cpp文件中并按如下方式编译:

g++ -L/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/ -g -o main main.cpp -I/usr/include/python3.6 -lpython3.6

我尝试了以下方法,但没有一种方法可行:

  1. 使用pathPySys_GetObject添加PyList_Insert的当前路径(根据此link
  2. 设置PYTHONPATH=/tmp然后运行主程序(根据此link
  3. /tmp/main.cpp

    #include <iostream>
    #include <python3.6/Python.h>
    using namespace std;
    
    int main()
    {
        Py_Initialize();
        PyObject* sysPath = PySys_GetObject("path");
        PyObject *path = PyBytes_FromString("/tmp");
        int result = PyList_Append(sysPath, path);
    
        PyObject* module = PyImport_ImportModule("hello");
    
        if (0 != module)
        {
            PyObject* helloFunc = PyObject_GetAttrString(module, "hello");
            if (helloFunc)
            {
                PyEval_CallObject(helloFunc, 0);
            }
            else
            {
                fprintf(stderr, "hello function is NULL");
            }
        }
        else
        {
            fprintf(stderr, "hello module is NULL -- somehow");
        }
    
        Py_Finalize();
        return 0;
    }
    

    /tmp/hello.py

    class hello(object):
        def __init__(self):
            print("Hello world: init")
    
        def hello(self):
            print("Hello world: hello")
    

    请有人告诉我为什么PyImport_ImportModule总是在我的简单程序中返回NULL?

    非常感谢!

0 个答案:

没有答案