RTX5070踩坑血泪史记录

写了一个大模型推理的项目然后本来在RTX4060上运行没有问题,但是在5070上运行出现了各种兼容性问题最明显的就是报错

我的电脑显卡是RTX5070,我安装了CUDA12.8驱动,但是我的pyqt5程序打包后报错OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading "D:\zhangshengfei666\my_main\_internal\torch\lib\c10.dll" or one of its dependencies.
[PYI-14784:ERROR] Failed to execute script 'my_main' due to unhandled exception!

解决方案
快速判断是缺哪种 dll 的方法
直接双击运行你的 exe,可能弹窗提示缺少具体的 .dll 名字。如果没有提示,打开 Windows 事件查看器(eventvwr.msc)→ Windows 日志 → 应用程序,找到报错条目,会看到详细的加载失败模块名。
然后直接从你的 Python 环境复制对应 dll 即可。

我的报错内容是

事件查看器日志展示内容出错应用程序名称: my_main.exe,版本: 0.0.0.0,时间戳: 0x69ec7cf3
出错模块名称: MSVCP140.dll, 版本: 14.26.28720.3,时间戳: 0x5e74aeb6
异常代码: 0xc0000005
错误偏移: 0x0000000000012ea0
出错进程 ID: 0x65F0
出错应用程序开始时间: 0x1DCD4A1533B04F1
Faulting 应用程序路径: D:\zhangshengfei666\my_main\my_main.exe
Faulting 模块路径: D:\zhangshengfei666\my_main\_internal\PyQt5\Qt5\bin\MSVCP140.dll
Report ID: 79fd5264-ef0c-4d25-b6f3-11ee3dfba88f
Faulting 包全名: 
Faulting 程序包相对应用程序 ID:  个

为什么会出现这个错误?
PyInstaller 在打包时,会把 Python 环境中 PyQt5 自带的 MSVCP140.dll、VCRUNTIME140.dll 等 VC++ 运行时库复制到 _internal\PyQt5\Qt5\bin\ 目录下。
你的系统已经通过“VC++ 2019 Redistributable”安装了这些运行时,而打包后的 exe 会优先加载自己目录下的这份 DLL。如果这两个版本不匹配或者文件损坏/不完整,就会导致 0xc0000005 访问冲突。

解决方案
解决办法(简单有效)

  1. 直接删除打包内冲突的 VC++ 运行时 DLL(强烈推荐)
    在你的打包输出目录(dist\my_main_internal\PyQt5\Qt5\bin\)中,找到并删除以下文件:

MSVCP140.dll

VCRUNTIME140.dll

VCRUNTIME140_1.dll (如果有的话)

删除后,程序会自动回退使用系统目录(C:\Windows\System32)下的官方 VC++ 运行时,崩溃问题就会消失。

注意:如果打包时已经用 --onefile 打包成单个 exe,你需要先解压或重新用 --onedir 模式打包来验证;如果是 --onefile,PyInstaller 会在临时目录中解压,你可以在运行 exe 后到 %TEMP%_MEIxxxxx\PyQt5\Qt5\bin\ 中删除这些 DLL 测试,但最终根治方法还是修改打包流程。

  1. 如果删除后提示找不到 DLL,检查是否漏装了 VC++ 运行时
    确保目标机器安装的是最新版 Visual C++ Redistributable 2015-2022,安装后系统目录里会有正确的 MSVCP140.dll,程序就能正常调用。

  2. 打包时主动排除这些 DLL(一劳永逸)
    修改 PyInstaller 的 .spec 文件,在 exe 部分添加 excludes,禁止将 Qt 自带的 VC++ 库打包进去:

python
a = Analysis(

binaries=None,

)
pyz = PYZ(…)
exe = EXE(
pyz,
a.scripts,
exclude_binaries=True, # 这个一般已经是True

)

重点:在 coll 部分排除特定 DLL

coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,

strip=False,
upx=False,
upx_exclude=[],
name=‘my_main’,
)
更简单的方式是直接使用命令行参数排除:

bash
pyinstaller --exclude-module MSVCP140.dll --exclude-module VCRUNTIME140.dll …
但更彻底的做法是:

bash
–exclude-binaries “MSVCP140.dll” --exclude-binaries “VCRUNTIME140.dll” --exclude-binaries “VCRUNTIME140_1.dll”

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐