PyInstaller打包含snap7的Python项目时snap7.dll加载失败求助
解决PyInstaller打包snap7项目时的DLL加载错误
错误原因分析
- 核心问题:PyInstaller未自动将
snap7.dll打包进可执行文件,程序运行时临时解压目录找不到该动态库 - WinError 193通常由32位/64位架构不匹配导致:比如Python是64位,但使用了32位的
snap7.dll,反之亦然
具体解决步骤
1. 确认snap7.dll的路径与架构匹配
- 找到Python环境中snap7的安装目录,一般路径为
Lib\site-packages\snap7\lib\,目录内有对应架构的snap7.dll(64位或32位) - 验证Python与DLL的架构一致性:
打开命令行执行:
返回python -c "import sys; print(sys.maxsize > 2**32)"True为64位Python,False为32位,确保使用同架构的snap7.dll,不匹配则重新安装对应版本的python-snap7
2. 手动指定PyInstaller打包时包含snap7.dll
有两种实现方式:
方式一:命令行参数直接指定
执行打包命令时,用--add-data参数将snap7.dll加入打包文件:
pyinstaller --onefile --add-data "path\to\snap7.dll;snap7\lib" main.py
- Windows系统用
;分隔源路径和目标路径,Linux/macOS用: - 目标路径需与snap7库加载时的预期路径一致,即
snap7\lib\
方式二:修改.spec文件
- 先生成.spec配置文件:
pyinstaller --onefile main.py
- 打开生成的
main.spec,在datas列表中添加snap7.dll的路径配置:
a = Analysis( ['main.py'], datas=[('path\\to\\snap7.dll', 'snap7\\lib')], # 保留其他原有配置 )
- 基于修改后的.spec文件重新打包:
pyinstaller main.spec
3. 验证打包结果
- 打包完成后运行dist目录下的exe文件,检查是否仍有DLL加载错误
- 若问题未解决,可临时将
snap7.dll复制到exe所在的dist目录下测试,确认DLL本身无问题后再调整PyInstaller配置
内容的提问来源于stack exchange,提问作者MG7702
相关产品推荐
相关产品推荐

