2011-04-09 86 views
1

我一直在爲Blender編寫一個導出腳本,它爲任何插件使用python。由於我的大部分代碼庫都是用C++編寫的,因此我決定將我的代碼封裝爲一個python模塊(pyd),它將從導出腳本導入並傳遞所有相關位進行轉換。Python,從Python/Blender的發佈版本加載調試模塊

只要我發佈版本攪拌器加載模塊就好了,我甚至可以用Visual Studio進行調試 - 但要解決一個錯誤,發佈版本不可靠,所以我需要使用模塊的調試版本。不幸的是,在這種情況下,模塊不會加載。

在Python控制檯:

>>> import exporter_d 
Traceback (most recent call last): 
    File "<blender_console>", line 1, in <module> 
ImportError: DLL load failed: The specified module could not be found. 

環視了一下後,我發現該錯誤是另一個DLL不可能找到,因爲我不加載任何東西我加蟒蛇的調試版本以及我的模塊。現在的錯誤是不同的:

Traceback (most recent call last): 
    File "<blender_console>", line 1, in <module> 
ImportError: dynamic module does not define init function (PyInit_exporter_d) 

所以我從「PyInit_exporter」改變了模塊初始化名「PyInit_exporter_d」(和刪除調試pythond.dll因爲它崩潰致命錯誤攪拌機),它返回第一錯誤(DLL加載faild)。

所以,我的問題是,如何在運行python發行版本時加載python模塊的調試版本? 由於python嵌入在攪拌機中,我想避免下載源代碼並重建它。

回答

1

這是如何設置環境,使您可以同時使用調試和發佈版本:

在你的C++代碼,你需要有

PyMODINIT_FUNC initmyExporter(void) 

在Visual Studio解決方案(或任何使用指定代碼的編譯)結果的名字說

<path_to_some_folder>\myExporter_d.pyd for Debug mode 

<path_to_some_folder>\myExporter.pyd for Release mode 

導入時,使用

import myExporter 

既python.exe和python_d.exe

+0

今天我要嘗試一下,希望攪拌機沒有問題與! – MichalisB 2013-01-25 12:12:28

+0

是否有效?不知道我的食譜是否足夠詳細。 – 2013-01-29 14:44:57

+0

不幸的是它不工作,我不認爲有一種方法可以將調試模塊加載到python的發佈版本中(除非我在調試時自己構建攪拌器) – MichalisB 2013-04-11 20:49:33