问题:
I am getting this error when I run import darknet
:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\darknet-master\build\darknet\x64\darknet.py", line 211, in <module>
lib = CDLL(winGPUdll, RTLD_GLOBAL)
File "C:\Users\AppData\Local\Programs\Python\Python39\lib\ctypes\__init__.py", line 374, in __init__
self._handle = _dlopen(self._name, mode)
FileNotFoundError: Could not find module 'C:\Users\darknet-master\build\darknet\x64\yolo_cpp_dll.dll' (or one of its dependencies). Try using the full path with constructor syntax.```
解决方法:增加winmode=0
原因:python 3.8 规则更改
由以上资料可知,可信的位置包括:
- DLL 所在的路径(加载 DLL 时提供 DLL 的完整路径或部分路径,文件存在则该路径即可信)。
- 使用
add_dll_directory()
添加的路径。 - (系统可信位置)
因此,下面这种之前可行的写法在 Windows Python 3.8 下会导致异常:
mb = ctypes.cdll.LoadLibrary("node.dll") # 指定了 DLL 名,Python 3.8 下抛出异常
# `FileNotFoundError: Could not find module 'node.dll'`
该语句指定待加载的模块名是 node.dll
,但由于当前工作目录不在可信位置里,故不会搜寻当前目录下的 DLL,最终导致无法在可信位置里找到名字匹配的模块,遂异常。
而下面的写法则不会异常:
mb = ctypes.cdll.LoadLibrary("./node.dll") # 指定了 DLL 的路径
因为 ./node.dll
实际上是给出了模块路径而不是模块名,当显式地给出模块路径时,模块存在则该路径属于可信位置,可以加载。