我有我swigged到Python 2.7 C ++应用程序。 目前,我试图端口我的代码在Python 2.7到Python 3.4使用Python / C API和痛饮。
我有一个包含多个模块的封装。 问题是我无法找到一个方法来初始化我的模块ModuleABC作为包PackageXYZ的子模块。 它与Python 2.7,但不与Python 3.4效果很好(我想这是行不通的或者与任何的Python 3.x版)。
这里是我的代码。
ModuleABC.h
extern "C"
{
#if PY_MAJOR_VERSION >= 3
PyObject* PyInit__ModuleABC(void);
#else
void init_ModuleABC(void);
#endif
}
void InitModule()
{
// Defined in the SWIG generated cpp file
#if PY_MAJOR_VERSION >= 3
PyImport_AppendInittab("PackageXYZ.ModuleABC", PyInit__ModuleABC);
#else
init_ModuleABC();
#endif
}
PythonManager.cpp
void initPythonInterpreter()
{
Py_SetPythonHome("C:\Python34");
Py_SetProgramName("MyApp.exe");
#if PY_MAJOR_VERSION < 3
// For Python 2.7
Py_Initialize();
#endif
// Init module
ModuleABC.InitModule();
#if PY_MAJOR_VERSION >= 3
// For Python 3.4
Py_Initialize();
#endif
int nResult = 0;
// Import package
nResult += PyRun_SimpleString("import PackageXYZ");
// Import module
// ERROR: Works with Python 2.7, but not with Python 3.4
nResult += PyRun_SimpleString("import PackageXYZ.ModuleABC");
}
如果我改变了一行:
PyRun_SimpleString("import PackageXYZ.ModuleABC");
至:
PyRun_SimpleString("import ModuleABC");
然后将其与没有错误运行,但我的模块没有在包中导入。
有任何想法吗?