无法在 Python 中导入 dll 模块

新手上路,请多包涵

几天来我一直在努力尝试在 Windows 上编译 libuvc 的修改版本,现在我终于完成了,我似乎无法在 Python 上加载它。我已经在 Linux 机器上使用相同版本的 Python 编译并成功导入的这个库,根本不喜欢 w10。

系统

  • 赢10 64位
  • 蟒蛇 3.8 64 位
  • libusb 1.022
  • 使用 MinGW64 编译的 libuvc.dll

问题

当尝试

import ctypes
import ctypes.util
name = ctypes.util.find_library('libuvc')
lib = ctypes.cdll.LoadLibrary(name)

我收到以下错误:

 Could not find module 'C:\Program Files (x86)\libuvc\lib\libuvc.dll'.
Try using the full path with constructor syntax.
Error: could not find libuvc!

问题是该文件存在,因为它是由 util.find_library 找到的,但 python 认为它不在它所在的位置,或者输出可能只是默认值。我在这里错过了什么?什么可能会失败,不仅无法加载模块,而且无法找到它?抱歉,我没有比这更多的输出了。

PS:我试过以不同的方式重新格式化字符串,但消息没有改变。

原文由 tigonza 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
1 个回答

Python 3.8 开始, .dll 搜索机制发生了变化( 特定于 Win )。

根据 [Python.Docs]: os.add_dll_directory(path)重点 是我的):

将路径添加到 DLL 搜索路径。

在解析 导入扩展模块 的依赖项(模块本身通过 sys.path 解析) 以及 ctypes 时使用此搜索路径。

可用性:视窗

所以,你可以这样做:

 os.add_dll_directory("${path_to_working_dlls_directoy}")

其中 _${path_to_working_dllsdirectoy} 是实际路径的占位符,它(显然)应该被它替换。

您可以查看 [SO]: PyWin32 and Python 3.8.0(@CristiFati 的回答) (虽然看起来非常不同, 但原因相同),以了解更多详细信息。

PSNix 操作系统 不受影响。

原文由 CristiFati 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题