Win10中Python3.8调用动态链接库时报错:FileNotFoundError: Could not find module解决方案
·
目录
1 问题
在python3.8中调用动态链接库时报错,代码如下
import platform
from ctypes import *
if platform.system().lower() == 'windows':
self.lib = cdll.LoadLibrary('./platform/percipio_cam.dll')
else:
self.lib = cdll.LoadLibrary('./platform/libpercipio_cam.so')
报错信息为:FileNotFoundError: Could not find module 'D:\PycharmProject\AutoNeck\platform\percipio_cam.dll' (or one of its dependencies). Try using the full path with constructor syntax.具体如下图所示

2 原因
这段程序放在python3.6环境中运行是没有问题的,但是python3.8环境中会报错。具体原因在于python3.8变更了Windows下动态链接库(DLL)的加载规则。新的规则提高了安全性,默认情况下仅能从可信的位置加载DLL依赖,一定程度上比避免诸如DLL劫持之类的安全风险。
3 解决方案
解决方案有多种,这里仅提供一种。只需要稍微修改一下代码即可,具体如下:
import platform
from ctypes import *
if platform.system().lower() == 'windows':
self.lib = CDLL('./platform/percipio_cam.dll', winmode=0)
else:
self.lib = cdll.LoadLibrary('./platform/libpercipio_cam.so')
指定winmode参数(该参数将指定底层调用WinAPI LoadLibraryEx时所使用的flags),将值指定为可以从本地路径加载,替换掉默认行为。
此时我们就可以正常加载DLL文件啦!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)