在 Python 2.7 我愿意
void InitPython()
{
..
Py_InitModule3("my_prog", ProgMethods, "documentation");
..
}
然后我将可以在我的c++代码中像这样执行import my_prog
char strCode[] = "import my_prog, sys, os\n"
PyRun_SimpleString(strCode);
但是在 Python 3.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”的模块
该如何解决?
答案 0 :(得分:1)
documentation I can find表示您的初始化函数应命名为PyInit_mymodule
并标记为PyMODINIT_FUNC
:
static PyMethodDef SpamMethods[] = {
// ...
{"system", spam_system, METH_VARARGS, "Execute a shell command."},
// ...
{NULL, NULL, 0, NULL} /* Sentinel */
};
// ...
static struct PyModuleDef spammodule = {
PyModuleDef_HEAD_INIT,
"spam",
spam_doc,
-1,
SpamMethods
};
// ...
PyMODINIT_FUNC
PyInit_spam(void)
{
return PyModule_Create(&spammodule);
}
(顺便说一句,除非您确实需要在C中创建扩展名,否则我建议也查看Cython。)