C ++ Swig Python(C ++中的嵌入式Python)在Release中工作,但在Debug中不工作

时间:2010-06-08 19:33:11

标签: python debugging swig

平台:Windows 7,64位(x64),Visual Studio 2008

我选择了Python& Swig绑定作为应用程序的脚本环境。

作为原型,使用main()创建一个简单的VS解决方案,初始化Python(Py_Initalize,Py_setPyHome等)&执行test.py.在同一个解决方案中创建了另一个项目,它是一个简单类的DLL。使用SWIG来包装这个类。这个DLL是_MyClasses.pyd。 test.py创建了我的类的对象&调用其成员函数。

所有这一切都像发布模式中的魅力。但是在调试模式下不起作用(甚至尝试在笔记本电脑上敲我的头;-))。

我的作品输出如下(在发布和调试中):

  x64
    -debug
     - _MyClasses.pyd
     - MyClasses.py
     - test.exe
     - test.py
     - python26.dll
     - python26_d.dll

请注意,调试版本与python26_d.lib相关联。不得不为此自己构建python!

test.py
import MyClasses

print "ello"
m = MyClasses.Male("John Doe", 25)
print m.getType()

男性是C ++类。

The problem:
Traceback (most recent call last):
  File "test.py", line 6, in <module>
    import MyClasses
  File "...\x64\Debug\MyClasses.py", line 25, in <module>
    _MyClasses = swig_import_helper()
  File "...\x64\Debug\MyClasses.py", line 17, in swig_imp
ort_helper
    import _MyClasses
ImportError: No module named _MyClasses
[15454 refs]

我习惯Makefile&amp;我是Visual Studio的新手。我不知道谁是罪魁祸首:Swig,Python的调试版本,Visual Studio,我的愚蠢。

提前谢谢你。这将是一个很大的帮助。

1 个答案:

答案 0 :(得分:1)

好吧 - 找到了。调试输出dll必须命名为xxx_d.pyd !!在上面的例子中,它将是_MyClasses_d.pyd