Python更新到了Python38,有一个非常好的更新,统一了Debug与Release模式下的ABI,也就是说在C/C++中嵌入Python时,可以直接在Debug模式下用Release的Python了,果断考虑从Python37更新到Python38。想当初为了调试在Debug模式下的C/C++&Python混合代码,把Python的模块都编译了个遍~~~~。
然而事情往往总是不会一帆风顺,在把代码移植后,本以为会执行得很好的代码报错了:
ImportError: DLL load failed while importing QtCore: 找不到指定的模块。
思考:这份代码在Python37下运行正常,会是什么原因呢?
1、dll系统搜索路径不对
加path解决,无效,看来不是这个原因导致的。
2、试试执行python3.exe 再执行import PyQt5.QtCore会不会报错
没有报错,但是仍然不知道是什么原因导致的。
3、将程序拷贝到Python目录,直接运行
没有报错,看到了成功的希望,但是这个不是解决问题的办法,还得继续找原因。
4、vs以调试模式运行拷贝到python目录的程序
仍然运行正常,还是对问题未知。(此时已一头雾水)
5、用DEPENDS.EXE分析QtCore.pyd对库的依赖,在执行import PyQt5.QtCore之前将这些依赖调用LoadLibraryA加载
过程中加载了Qt5Core.dll、Python3.dll、sip.cp38-win32.pyd,能正常运行
尝试只加载Python3.dll,依然能正常运行,此时貌似在程序运行前执