Python,从Python/Blender的发行版加载调试模块

Python,从Python/Blender的发行版加载调试模块,python,debugging,blender,python-module,Python,Debugging,Blender,Python Module,我一直在为Blender编写一个导出脚本,它对任何插件都使用python。由于我的代码库大部分都是C++,所以我决定将代码打包为Python模块(Pyd),它将从导出脚本导入,并传递所有相关的位进行转换。 只要我使发布版本blender能够很好地加载模块,我甚至可以使用visual studio进行调试—但要解决错误,发布版本不可靠,因此我需要使用模块的调试版本。不幸的是,在这种情况下,模块没有加载 从python控制台: >>> import exporter_d Tra

我一直在为Blender编写一个导出脚本,它对任何插件都使用python。由于我的代码库大部分都是C++,所以我决定将代码打包为Python模块(Pyd),它将从导出脚本导入,并传递所有相关的位进行转换。 只要我使发布版本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.
>>进口出口商\u d
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:DLL加载失败:找不到指定的模块。
在四处查看了一会儿之后,我发现错误是找不到另一个dll,因为我没有加载任何其他东西,所以我在模块中添加了python的调试版本。现在错误不同了:

Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
ImportError: dynamic module does not define init function (PyInit_exporter_d)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:动态模块未定义初始化函数(PyInit\u exporter\u d)
因此,我将模块init名称从“PyInit_exporter”更改为“PyInit_exporter_d”(并删除了debug pythond.dll,因为它会导致混合器崩溃,并出现致命错误),这会返回第一个错误(dll加载失败)

所以,我的问题是,在运行python发布版本时,如何加载python模块的调试构建?
由于python嵌入到blender中,我希望避免下载源代码并重新构建它。

以下是如何设置环境,以便您可以同时使用调试和发布版本:

在C++代码中,你需要有< /P>

PyMODINIT_FUNC initmyExporter(void)
在VisualStudio解决方案(或用于指定代码编译结果名称的任何内容)中


使用python.exe和python_d.exe这是如何设置环境,以便您可以同时使用调试和发布版本:

在C++代码中,你需要有< /P>

PyMODINIT_FUNC initmyExporter(void)
在VisualStudio解决方案(或用于指定代码编译结果名称的任何内容)中


使用python.exe和python_d.exe,我能够在python扩展中以本机代码进行调试:混合使用debug和release python libs:但我使用了一些技巧:

  • 在“带有调试信息的发布模式”中构建本机库:请参阅
  • 在模块上运行python.exe setup.py build_ext--compiler=msvc--in place来构建扩展。这只是为了查看编译器工具链命令
  • 将这些命令复制并粘贴到.bat文件中
  • 修改命令:启用调试符号(/Zi)、禁用优化(/Od)等
  • 将/Ox更改为/Od
    将/Zi标志添加到编译器标志
    向链接器标志添加/调试标志

  • 现在手动构建扩展,而不是使用python distutils

  • TODO:将这些更改集成到Python distutils中:为visual studio工具链添加一个“-build--relWithDebInfo”标志

    我能够在Python extension中以本机代码进行调试:混合使用调试和发布Python libs:但我使用了一些技巧:

  • 在“带有调试信息的发布模式”中构建本机库:请参阅
  • 在模块上运行python.exe setup.py build_ext--compiler=msvc--in place来构建扩展。这只是为了查看编译器工具链命令
  • 将这些命令复制并粘贴到.bat文件中
  • 修改命令:启用调试符号(/Zi)、禁用优化(/Od)等
  • 将/Ox更改为/Od
    将/Zi标志添加到编译器标志
    向链接器标志添加/调试标志

  • 现在手动构建扩展,而不是使用python distutils

  • TODO:将这些更改集成到Python distutils中:为visual studio工具链添加一个“-build--relWithDebInfo”标志

    我今天将尝试它,希望blender不会有这个问题!不幸的是,它不起作用,我不认为有办法将调试模块加载到python的发布版本中(除非我自己在调试中构建blender…),很抱歉,我的第一个答案没有帮助。如果你还在乎的话,你可以用另一种方式试试。从Python网站下载Python-YourVersion.tar.bz2,解压缩,查找example.sln(在\PC\example\nt中,用于2.7),在VC中打开它并尝试编译它。这是一个快速的方法来检查dablility。如果您可以在调试模式下编译它,并且能够在python_d中加载和调试这个示例,那么,通过调整VS项目的一些其他属性,您将获得自己的解决方案。这里的问题是嵌入Blender中的python——出于明显的原因,Blender正在发布中,并且期望模块也在发布中。我有点希望我可以破解并允许一个调试模块被加载/导入。我今天将尝试它,希望blender没有这个问题!不幸的是,它不起作用,我不认为有办法将调试模块加载到python的发布版本中(除非我自己在调试中构建blender…),很抱歉,我的第一个答案没有帮助。如果你还在乎的话,你可以用另一种方式试试。从Python网站下载Python-YourVersion.tar.bz2,解压缩,查找example.sln(在\PC\example\nt中,用于2.7),在VC中打开它并尝试编译它。这是一个快速的方法来检查dablility。如果您可以在调试模式下编译它,并且能够在python_d中加载和调试这个示例,那么,通过调整VS项目的一些其他属性,您将获得自己的解决方案。这里的问题是嵌入Blender中的python——出于明显的原因,Blender正在发布中,并且期望模块也在发布中。我有点希望我可以随便转转,允许加载/导入调试模块。
    <path_to_some_folder>\myExporter.pyd for Release mode
    
    import myExporter