我正在尝试在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
我尝试了以下方法,但没有一种方法可行:
path
和PySys_GetObject
添加PyList_Insert
的当前路径(根据此link)PYTHONPATH=/tmp
然后运行主程序(根据此link)/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?
非常感谢!