Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Python3.x中初始化模块以便导入?_C++_Python_Python 3.x_Python 2.7 - Fatal编程技术网

C++ 如何在Python3.x中初始化模块以便导入?

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,

python2.7我愿意

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);
    ..
}