OR-Tools致Python3.12仅在Windows办公环境崩溃,疑与MSVCP140.dll相关
问题:OR-Tools在无管理员权限的Windows环境执行
solver.solve()时崩溃 我编写了如下基于OR-Tools的Python代码:
from ortools.sat.python import cp_model print("1/4") model = cp_model.CpModel() print("2/4") solver = cp_model.CpSolver() print("3/4") solver.solve(model) # <------------ 此处崩溃! print("4/4")
该代码在我家中拥有管理员权限的Windows 10 Home环境运行正常,但在公司两台无管理员权限的Windows Server 2016 Standard和Windows 10 Enterprise环境中,执行到solver.solve()时崩溃,无法输出4/4。
三台设备均使用相同版本的Python:
Python 3.12.1 (tags/v3.12.1:2305ca5, Dec 7 2023, 22:03:25) [MSC v.1937 64 bit (AMD64)] on win32
查看Windows事件日志发现:
Faulting application name: python.exe, version: 3.12.1150.1013, time stamp: 0x65724223 Faulting module name: MSVCP140.dll, version: 14.36.32532.0, time stamp: 0x04a30cf0 Exception code: 0xc0000005 Fault offset: 0x0000000000012f58 Faulting application path: C:\Users\.......\Python312\python.exe Faulting module path: C:\Windows\SYSTEM32\MSVCP140.dll
请问崩溃原因可能是什么?是否是企业杀毒软件干扰?是否需要更换Python版本?我测试的其他外部库(如pandas、oracledb)在所有环境均运行正常。
可能的原因与解决方案
1. 企业安全软件/组策略限制
事件日志中的0xc0000005是访问违例错误,大概率是企业环境的杀毒软件、EDR工具或组策略限制了OR-Tools底层C++组件的运行。这类安全工具常会拦截有系统调用行为的程序组件,无管理员权限的环境下管控会更严格。
- 验证方式:联系IT部门临时禁用测试设备的安全软件,再运行代码测试;检查组策略是否有禁止执行特定DLL或限制内存访问的规则。
2. MSVCP140.dll版本不兼容
OR-Tools依赖特定版本的Visual C++ Redistributable组件,企业环境的系统组件可能因更新策略限制,版本与OR-Tools要求不匹配,导致调用崩溃。
- 解决方案:下载安装对应版本的Microsoft Visual C++ Redistributable for Visual Studio 2022(选择x64版本,可选择“仅为当前用户安装”);对比家中环境的MSVCP140.dll版本,在企业环境替换为相同版本(需IT协助)。
3. Python版本兼容性问题
Python 3.12属于较新版本,OR-Tools对其的适配可能存在边缘情况,尤其是在受限环境下。虽然其他库运行正常,但OR-Tools的底层绑定可能对Python 3.12的特性适配不完善。
- 解决方案:降级到Python 3.11版本(OR-Tools对该版本支持更成熟),重新安装OR-Tools后测试;执行
pip install --upgrade ortools更新到最新稳定版OR-Tools。
4. 权限不足导致资源访问失败
OR-Tools执行solve()时可能需要写入临时缓存文件、访问特定系统资源,无管理员权限的用户可能没有这些资源的访问权限,进而引发崩溃。
- 验证方式:将代码和Python环境放在用户有权限的目录(如
C:\Users\你的用户名\Documents)下运行;检查OR-Tools的临时目录配置,手动指定到用户可读写的路径。
内容的提问来源于stack exchange,提问作者Leszek Pachura
相关产品推荐
相关产品推荐

