我已经生成了一个C ++库的SWIG python绑定。我希望其他人能够直接使用python编写脚本,但我也想在我的应用程序中嵌入python,以便用户可以设置python脚本来在运行时修改变量。当我运行python或python_d时,我可以导入我的库的发布和调试版本,没有问题,然后使用它们。但是,当我尝试嵌入它们时,我可以在发布模式下运行以下代码,但在调试模式下,我会收到以下错误。
嵌入代码:
Py_SetProgramName("AnimatLab");
Py_Initialize();
PyRun_SimpleString("import os\n"
"os.chdir(\"C:/Projects/AnimatLabSDK/AnimatLabPublicSource/bin\")\n"
"import AnimatSimPy\n");
Py_Finalize();
错误:
C:\Projects\AnimatLabSDK\AnimatLabPublicSource\bin
Traceback (most recent call last):
File "<string>", line 4, in <module>
ImportError: No module named AnimatSimPy
我知道_AnimatSimPy_d.pyd在调试模式下工作,因为我可以在运行python_d时导入并使用它,但由于某种原因它在嵌入时不会运行。有没有人对为什么失败有任何想法?我将调试版本链接到64位Windows 7计算机上的python27_d.dll。
答案 0 :(得分:0)
我想出来了。我不知道为什么,但在调试模式下,它要求我附加到我的路径添加dll所在的目录,而不仅仅是设置工作目录。对于发布模式,它没有这个。因此,如果我运行下面的代码,它将在嵌入式代码的调试和发布模式下工作。
Py_SetProgramName("AnimatLab");
Py_Initialize();
PyRun_SimpleString("import os\n"
"import sys\n"
"sys.path.append(\"C:/Projects/AnimatLabSDK/AnimatLabPublicSource/bin\")\n"
"os.chdir(\"C:/Projects/AnimatLabSDK/AnimatLabPublicSource/bin\")\n"
"import AnimatSimPy\n");
Py_Finalize();