pyinstaller 打包时OSError: [WinError 126] 找不到指定的模块 —— 解决办法

在这里插入图片描述
pyinstaller 打包python程序时,python里在使用ctypes库调用C++程序创建的dll时,会产生如下错误:
OSError: [WinError 126] 找不到指定的模块

主要原因有二:

(1)没有找到该DLL文件,路径不对或者被杀毒软件隔离;
(2)你的DLL动态库依赖于其他其他DLL动态库无法被系统找到。在Python里面载入dll时,如果这个dll还依赖于其它的dll的话,这些相关的dll也得要能被Python的进程访问到。

解决方法:

对于原因一,可以把"**.dll "文件路径改为绝对路径;把杀毒软件关闭重新操作。

对于原因二,最基本的解决方式是把相关的DLL 动态库也导进来,这样问题基本就能解决。如果无法确定相关DLL 动态库,引起这类问题的原因很可能是由于你的目标主机没有安装相关的C++环境。解决方法:下载Visual C++ Redistributable运行库,64位版本下载地址为 https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145

我通过前一个办法解决了问题。

如何使用相对路径?

如果使用相对路径的话就方便多了,只要把dll文件放置在与应用程序exe同一目录下就可以正常运行程序了。

方法很简单:只要取得应用程序的路径即可:

dll_name = 'ControlCAN.dll'
#是否被打包成EXE状态下运行,还是脚本状态下运行?
if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
elif __file__:
    application_path = os.path.dirname(__file__)
dll_path = os.path.join(application_path, dll_name )
print(dll_path )
#使用ctypes模块的windll类导入dll_path 路径即可。
canLib = windll.LoadLibrary(dll_path )
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yfw&武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值