嵌入式SWIG python调试版本不允许我导入

时间:2014-05-21 21:11:05

标签: debugging python-2.7 swig

我已经生成了一个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。

1 个答案:

答案 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();