C++ 如何在Python3.x中初始化模块以便导入?
在 python2.7我愿意C++ 如何在Python3.x中初始化模块以便导入?,c++,python,python-3.x,python-2.7,C++,Python,Python 3.x,Python 2.7,在 python2.7我愿意 void InitPython() { .. Py_InitModule3("my_prog", ProgMethods, "documentation"); .. } 然后我就可以在我的代码中这样做导入我的_prog (strCode) 然而在 Python3.6,遵循官方文档并应用更改不起作用 static struct PyModuleDef moduledef = { PyModuleDef_HEAD_INIT,
void InitPython()
{
..
Py_InitModule3("my_prog", ProgMethods, "documentation");
..
}
然后我就可以在我的代码中这样做导入我的_prog
(strCode)
然而在 Python3.6,遵循官方文档并应用更改不起作用
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
"my_prog", /* m_name */
"documentation", /* m_doc */
-1, /* m_size */
ProgMethods, /* m_methods */
NULL, /* m_reload */
NULL, /* m_traverse */
NULL, /* m_clear */
NULL, /* m_free */
};
void InitPython()
{
..
PyObject *m1 = PyModule_Create(&moduledef);
..
}
失败,出现以下错误:
ModuleNotFoundError:没有名为“my_prog”的模块
如何修复此问题?说明初始化函数应命名为PyInit\u mymodule
,并标记为PyMODINIT\u FUNC
:
static PyMethodDef SpamMethods[]={
// ...
{“system”,spam_system,METH_VARARGS,“执行shell命令。”},
// ...
{NULL,NULL,0,NULL}/*哨兵*/
};
// ...
静态结构PyModuleDef spammodule={
PyModuleDef_HEAD_INIT,
“垃圾邮件”,
垃圾文件,
-1,
垃圾方法
};
// ...
PyMODINIT_FUNC
PyInit_垃圾邮件(无效)
{
返回PyModule_Create(&spammodule);
}
(顺便说一句,除非您真的需要用C创建扩展,否则我建议您也看看。)
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
"my_prog", /* m_name */
"documentation", /* m_doc */
-1, /* m_size */
ProgMethods, /* m_methods */
NULL, /* m_reload */
NULL, /* m_traverse */
NULL, /* m_clear */
NULL, /* m_free */
};
void InitPython()
{
..
PyObject *m1 = PyModule_Create(&moduledef);
..
}