[英]Python/C++ wrapper Using external dll with Pybind11
Python 版本: 3.8.1
Spyder 版本: 3.3.6
Qt 版本: 5.12.9
包装器:使用 PyBind11 开发
我在 C++ 中包装了dll
开发,它使用Qt dlls
与 ZA7F5F35413B5274117363 一起使用。 我使用编译器 MSVC 使用 Visual Studio 2019 编写了包装器(因为我的 dll 是使用 MSVC 编译的)。 在 VS2019 中生成解决方案后,我获得了一个.pyd
文件,该文件可以使用 python 导入。
当我使用 python 在线命令时效果很好:
cmd.exe
$python
import MyLibName
我可以使用函数/类...但是如果我尝试使用 Spyder,我会收到以下错误:
ImportError: DLL load failed while importing PyStack: The specified module could not be found..
所以这是我的问题:
有没有办法获取有关ImportError
的更多信息,例如缺少的dll
的名称或其他信息?
我不明白为什么这个问题只发生在 spyder 上。 我尝试使用IPython Qt
控制台,它可以工作。 spyder 是否使用嵌入式 python 版本之类的?
我不完全理解 dll 应该如何管理,我的意思是我应该提供 dll 之类的libGLESV2.dll
和.pyd
吗?
先感谢您。
我想我发现 Qt/python 的哪个部分产生了这个问题,但我仍然不知道如何解决它。
我的 dll 使用需要执行事件循环的信号/插槽。 如果事件循环已经在运行 dll 将尝试使用它,如果循环版本(例如:PyQt5==5.14.1)与我的(例如 Qt==5.15.1)不同,则无法导入。
请注意,反之亦然,如果我运行 dll 然后尝试使用 %gui qt 启动循环,该命令将引发错误。
最后一条命令应打印: ERROR:root:DLL load failed while importing QtSvg: The specified procedure could not be found.
免责声明:这里提供的解决方案肯定不是最好的,如果您知道更好的解决方案,请分享☺
如果你只想在 Spyder 中导入你的库,你可以使用另一个事件循环。 以下是更改此设置的步骤:
如果你想使用 Qt 事件循环,你必须更新它。 您可以使用 pip 命令执行此操作,但请记住 Spyder 与某些版本不兼容。 这是 pip 命令:
Pip install PyQt5==X.Y.Z
其中 X 和 Y 是用于编译 Qt 项目的相同版本。 最后一位数字版本似乎并不重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.