安装NumPy 2.0.0后导入cv2报错:模块编译版本不兼容
问题重现
1. 安装NumPy 2.0.0
执行安装命令:
pip install numpy==2.0.0
验证版本:
import numpy as np np.__version__ # 输出:2.0.0

2. 安装opencv-python
执行命令后发现包已存在:
pip install opencv-python
输出内容:
Requirement already satisfied: opencv-python in /usr/local/lib/python3.10/dist-packages (4.8.0.76) Requirement already satisfied: numpy>=1.21.2 in /usr/local/lib/python3.10/dist-packages (from opencv-python) (2.0.0)
3. 导入cv2触发错误
执行导入代码:
import cv2
弹出兼容性提示:
使用NumPy 1.x编译的模块无法在NumPy 2.0.0中运行,否则可能崩溃。若要同时支持NumPy 1.x和2.x版本,模块必须使用NumPy 2.0编译。部分模块可能需要重新构建,例如使用'pybind11>=2.12'。
如果您是该模块的用户,最简单的解决方案是降级到'numpy<2',或尝试升级受影响的模块。我们预计部分模块需要时间来支持NumPy 2。
完整错误回溯:
Traceback (most recent call last): File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "/usr/lib/python3.10/runpy.py", line 86, in _run_code exec(code, run_globals) File "/usr/local/lib/python3.10/dist-packages/colab_kernel_launcher.py", line 37, in <module> ColabKernelApp.launch_instance() File "/usr/local/lib/python3.10/dist-packages/traitlets/config/application.py", line 992, in launch_instance app.start() File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelapp.py", line 619, in start self.io_loop.start() File "/usr/local/lib/python3.10/dist-packages/tornado/platform/asyncio.py", line 195, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.10/asyncio/base_events.py", line 603, in run_forever self._run_once() File "/usr/lib/python3.10/asyncio/base_events.py", line 1909, in _run_once handle._run() File "/usr/lib/python3.10/asyncio/events.py", line 80, in _run self._context.run(self._callback, *self._args) File "/usr/local/lib/python3.10/dist-packages/tornado/ioloop.py", line 685, in <lambda> lambda f: self._run_callback(functools.partial(callback, future)) File "/usr/local/lib/python3.10/dist-packages/tornado/ioloop.py", line 738, in _run_callback ret = callback() File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 825, in inner self.ctx_run(self.run) File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 786, in run yielded = self.gen.send(value) File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelbase.py", line 361, in process_one yield gen.maybe_future(dispatch(*args)) File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 234, in wrapper yielded = ctx_run(next, result) File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelbase.py", line 261, in dispatch_shell yield gen.maybe_future(handler(stream, idents, msg)) File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 234, in wrapper yielded = ctx_run(next, result) File "/usr/local/lib/python3.10/dist-packages/ipykernel/kernelbase.py", line 539, in execute_request self.do_execute( File "/usr/local/lib/python3.10/dist-packages/tornado/gen.py", line 234, in wrapper yielded = ctx_run(next, result) File "/usr/local/lib/python3.10/dist-packages/ipykernel/ipkernel.py", line 302, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/local/lib/python3.10/dist-packages/ipykernel/zmqshell.py", line 539, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 2975, in run_cell result = self._run_cell( File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3030, in _run_cell return runner(coro) File "/usr/local/lib/python3.10/dist-packages/IPython/core/async_helpers.py", line 78, in _pseudo_sync_runner coro.send(None) File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3257, in run_cell_async has_raised = await self.run_ast_nodes(code_ast.body, cell_name, File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3473, in run_ast_nodes if (await self.run_code(code, result, async_=asy)): File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3553, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-4-c8ec22b3e787>", line 1, in <cell line: 1> import cv2 File "/usr/local/lib/python3.10/dist-packages/google/colab/_import_hooks/_cv2.py", line 78, in load_module cv_module = imp.load_module(name, *module_info) File "/usr/lib/python3.10/imp.py", line 245, in load_module return load_package(name, filename) File "/usr/lib/python3.10/imp.py", line 217, in load_package return _load(spec) File "/usr/local/lib/python3.10/dist-packages/cv2/__init__.py", line 181, in <module> bootstrap() File "/usr/local/lib/python3.10/dist-packages/cv2/__init__.py", line 153, in bootstrap native_module = importlib.import_module("cv2") File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "/usr/local/lib/python3.10/dist-packages/google/colab/_import_hooks/_cv2.py", line 78, in load_module cv_module = imp.load_module(name, *module_info) File "/usr/lib/python3.10/imp.py", line 243, in load_module return load_dynamic(name, filename, file) File "/usr/lib/python3.10/imp.py", line 343, in load_dynamic return _load(spec) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) AttributeError: _ARRAY_API not found --------------------------------------------------------------------------- ImportError Traceback (most recent call last) <ipython-input-4-c8ec22b3e787> in <cell line: 1>() ----> 1 import cv2 8 frames /usr/lib/python3.10/imp.py in load_dynamic(name, path, file) 341 spec = importlib.machinery.ModuleSpec( 342 name=name, loader=loader, origin=path) --> 343 return _load(spec) 344 345 else: ImportError: numpy.core.multiarray failed to import --------------------------------------------------------------------------- 注意:如果您的导入因缺失包失败,可以使用!pip或!apt手动安装依赖。 如需查看安装常见依赖的示例,请点击下方的“Open Examples”按钮。
解决方案
- 降级NumPy到1.x版本:执行以下命令快速恢复兼容性:
pip install numpy<2 --force-reinstall - 等待OpenCV兼容更新:当前opencv-python 4.8.0.76基于NumPy 1.x编译,暂不支持NumPy 2.0。可定期执行升级命令,等待官方推出兼容版本:
pip install --upgrade opencv-python - 源码编译OpenCV:若需保留NumPy 2.0,可手动从OpenCV源码编译,确保编译环境使用NumPy 2.0,同时依赖
pybind11>=2.12。
内容的提问来源于stack exchange,提问作者Talha Tayyab
相关产品推荐
相关产品推荐

