You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac系统安装CyLP包后出现ImportError该如何修复?

macOS下CyLP包安装运行问题排查记录

初始环境与问题复现

  • 操作系统:macOS Big Sur 11.5.1
  • 运行环境:Anaconda3,Python 3.8.8
  • 目标安装包:CyLP

按照官方指引首先用homebrew安装cbc,首次执行brew install coin-or-tools/coinor/cbc失败,改用brew install cbc完成安装,随后执行pip install cylp安装CyLP本体。
安装显示成功,安装路径为/opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp,但在CyLP目录下执行单元测试命令python -m unittest discover时报错,错误信息如下:

ERROR: cy (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: cy
Traceback (most recent call last):
  File "/opt/homebrew/anaconda3/lib/python3.8/unittest/loader.py", line 470, in _find_test_path
    package = self._get_module_from_name(name)
  File "/opt/homebrew/anaconda3/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/cy/__init__.py", line 1, in <module>
    from .CyCoinIndexedVector import CyCoinIndexedVector
ImportError: dlopen(/opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/cy/CyCoinIndexedVector.cpython-38-darwin.so, 2): Symbol not found: __ZN9CoinError12printErrors_E
  Referenced from: /opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/cy/CyCoinIndexedVector.cpython-38-darwin.so
  Expected in: flat namespace
 in /opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/cy/CyCoinIndexedVector.cpython-38-darwin.so


======================================================================
ERROR: py (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: py
Traceback (most recent call last):
  File "/opt/homebrew/anaconda3/lib/python3.8/unittest/loader.py", line 470, in _find_test_path
    package = self._get_module_from_name(name)
  File "/opt/homebrew/anaconda3/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/py/__init__.py", line 1, in <module>
    from . import pivots
  File "/opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/py/pivots/__init__.py", line 3, in <module>
    from .PositiveEdgePivot import PositiveEdgePivot
  File "/opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/py/pivots/PositiveEdgePivot.py", line 9, in <module>
    from cylp.cy import CyCoinIndexedVector
  File "/opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/cy/__init__.py", line 1, in <module>
    from .CyCoinIndexedVector import CyCoinIndexedVector
ImportError: dlopen(/opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/cy/CyCoinIndexedVector.cpython-38-darwin.so, 2): Symbol not found: __ZN9CoinError12printErrors_E
  Referenced from: /opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/cy/CyCoinIndexedVector.cpython-38-darwin.so
  Expected in: flat namespace
 in /opt/homebrew/anaconda3/lib/python3.8/site-packages/cylp/cy/CyCoinIndexedVector.cpython-38-darwin.so


----------------------------------------------------------------------
Ran 2 tests in 0.000s

2021年9月12日更新

排查有初步进展,homebrew安装cbc存在已知问题,因此改为从源码编译安装CBC及其所有依赖。完成后配置COIN_INSTALL_DIR环境变量指向CBC安装目录,仍无法通过pip install cylp完成安装,报错为x86架构不兼容。
切换至Python 3.9环境,克隆CyLP仓库后使用pip3 install手动安装,安装程序可正常识别系统架构,不再忽略.dylib文件,但出现新的编译错误:

cylp/cpp/ICbcModel.cpp:35:9: error: no matching function for call to 'CbcMain0'
          CbcMain0(*this);
          ^~~~~~~~
  /Users/usr1/dist/include/coin/CbcSolver.hpp:310:6: note: candidate function not viable: requires 2 arguments, but 1 was provided
  void CbcMain0(CbcModel &babSolver, CbcSolverUsefulData &solverData);
       ^
  cylp/cpp/ICbcModel.cpp:37:16: error: no matching function for call to 'CbcMain1'
          return CbcMain1(3, argv, *this);
                 ^~~~~~~~
  /Users/usr1/dist/include/coin/CbcSolver.hpp:314:5: note: candidate function not viable: requires 4 arguments, but 3 was provided
  int CbcMain1(int argc, const char *argv[], CbcModel &babSolver,
      ^
  /Users/usr1/dist/include/coin/CbcSolver.hpp:312:5: note: candidate function not viable: requires 5 arguments, but 3 were provided
  int CbcMain1(int argc, const char *argv[], CbcModel &babSolver, int(CbcModel *currentSolver, int whereFrom), CbcSolverUsefulData &solverData);
      ^
  2 errors generated.
  error: command '/usr/bin/clang' failed with exit code 1
  ----------------------------------------
  ERROR: Failed building wheel for cylp........

2021年9月12日第二次更新

问题已基本解决。
执行单元测试仍有报错:

m.addConstraint(A * x == b)
EEClp6001E Unable to open file /opt/homebrew/lib/python3.9/site-packages/cylp/py/modeling/../../input/p0033.mps for reading
Clp3002W Empty problem - 0 rows, 3 columns and 0 elements
Clp0000I Optimal - objective value 0
E.Clp6001E Unable to open file /opt/homebrew/lib/python3.9/site-packages/cylp/py/../input/netlib/adlittle.mps for reading
zsh: segmentation fault  python3 -m unittest discover

上述报错可忽略,分段错误原因是CyLP的GitHub仓库缺失对应的两个测试用mps文件。自行编写测试代码验证,CyLP功能运行完全正常。
编译错误修复方案:修改ICbcModel.cpp文件,新增CbcSolverUsefulData实例,作为额外参数传入CbcMain0和CbcMain1函数即可。

内容的提问来源于stack exchange,提问作者PhQC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:48:04