几天来我一直在努力尝试在 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 许可协议
从 Python 3.8 开始, .dll 搜索机制发生了变化( 特定于 Win )。
根据 [Python.Docs]: os.add_dll_directory(path) ( 重点 是我的):
所以,你可以这样做:
其中 _${path_to_working_dllsdirectoy} 是实际路径的占位符,它(显然)应该被它替换。
您可以查看 [SO]: PyWin32 and Python 3.8.0(@CristiFati 的回答) (虽然看起来非常不同, 但原因相同),以了解更多详细信息。
PS : Nix 操作系统 不受影响。