M3 Max Mac使用pydfs_lineup_optimizer遇CBC求解器CPU类型错误
问题
在M3 Max Mac上使用Python包pydfs_lineup_optimizer(Python版本3.12.2)时,运行出现以下错误:
Traceback (most recent call last): File "/private/tmp/test.py", line 6, in <module> for lineup in optimizer.optimize(10): File "/private/tmp/venv/lib/python3.12/site-packages/pydfs_lineup_optimizer/lineup_optimizer.py", line 417, in optimize solved_variables = solver.solve() ^^^^^^^^^^^^^^ File "/private/tmp/venv/lib/python3.12/site-packages/pydfs_lineup_optimizer/solvers/pulp_solver.py", line 47, in solve self.prob.solve(self.LP_SOLVER) File "/private/tmp/venv/lib/python3.12/site-packages/pulp/pulp.py", line 1737, in solve status = solver.actualSolve(self, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/private/tmp/venv/lib/python3.12/site-packages/pulp/apis/coin_api.py", line 101, in actualSolve return self.solve_CBC(lp, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/private/tmp/venv/lib/python3.12/site-packages/pulp/apis/coin_api.py", line 152, in solve_CBC cbc = subprocess.Popen(args, stdout = pipe, stderr = pipe, stdin=devnull) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/subprocess.py", line 1026, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/subprocess.py", line 1953, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) OSError: [Errno 86] Bad CPU type in executable: '/private/tmp/venv/lib/python3.12/site-packages/pulp/apis/../solverdir/cbc/osx/64/cbc'
该包在M3 Pro上可正常运行,寻求解决办法。
解决方法
更换ARM原生CBC求解器:错误根源是pulp自带的CBC为x86架构,与M3 Max的ARM架构不兼容。通过Homebrew安装ARM版本的CBC:
brew install cbc安装完成后,在代码中指定使用系统级CBC求解器:
from pulp import CBC_CMD from pydfs_lineup_optimizer import get_optimizer, Site, Sport optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) optimizer.set_solver(CBC_CMD(path="/usr/local/bin/cbc"))创建Rosetta 2虚拟环境:利用Rosetta 2兼容x86架构,创建对应虚拟环境运行代码:
- 右键终端应用→显示简介→勾选「使用Rosetta打开」,启动兼容终端
- 在该终端下创建虚拟环境并激活:
python3 -m venv rosetta_venv source rosetta_venv/bin/activate - 重新安装依赖包:
pip install pydfs_lineup_optimizer
之后在该虚拟环境中运行代码即可。
降级Python版本:部分旧版Python对ARM架构兼容性更好,尝试降级到Python 3.11:
brew install python@3.11 python3.11 -m venv py311_venv source py311_venv/bin/activate pip install pydfs_lineup_optimizer
内容的提问来源于stack exchange,提问作者tera_789
相关产品推荐
相关产品推荐

