在嵌入式Python 3中创建新模块

2024-07-01 07:06:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的C++应用程序中嵌入了Python 2.7,它的工作与预期一样。现在切换到Python 3需要将Py_ModuleInit替换为PyModule_CreatePyImport_AppendInittab的组合,请参见下面的示例:

PyObject* PyInit_xyzzy(void)
{
    return PyModule_Create(&xyzzymodule);
}

int main()
{
    ...
    PyImport_AppendInittab("xyzzy", PyInit_xyzzy);
    Py_Initialize();
    ...
} 

由于几个原因,我目前无法更改应用程序中模块的注册过程。基本上,我有一个数组std::vector<PyModuleDef>,其中包含准备注册的所有模块定义。但是PyImport_AppendInittab接受一个没有任何上下文指针的函数指针。Lambdas显然也不起作用,那么什么是正确注册模块的好方法呢?还有别的办法吗

int main()
{
    for (const PyModuleDef& mod : getAllModules()
    {
        PyImport_AppendInittab(mod.m_name, ????????);
    }

    Py_Initialize();
} 

Tags: 模块pymod应用程序maincreatepyinitint

热门问题