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

Docker中安装OpenCV遇编译错误,寻求解决方案

问题:Docker构建Silvicek/baselines仓库时OpenCV编译失败

尝试在Docker中构建并安装Silvicek/baselines仓库,执行pip3 install -e .命令时触发OpenCV编译错误,具体信息如下:

Dockerfile内容

FROM tensorflow/tensorflow:1.14.0-gpu-py3

ENV TZ="America/Los_Angeles"
ARG DEBIAN_FRONTEND=noninteractive
RUN rm /etc/apt/sources.list.d/cuda.list && \
    rm /etc/apt/sources.list.d/nvidia-ml.list && \
    apt-key del 7fa2af80 && \
    apt-get update && apt-get install -y --no-install-recommends wget && \
    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb && \
    dpkg -i cuda-keyring_1.0-1_all.deb && \
    apt-get update
RUN apt-get install -y git python3-opencv
RUN mkdir /build
COPY baselines/ /build/baselines
WORKDIR /build/baselines
RUN ls -lrt /build
RUN ls -lrt /build/baselines
RUN pip3 install --upgrade pip setuptools wheel
RUN pip3 install -e . -vvv

构建命令

docker build -f dockerfile --progress=plain -t dist_dqn .

错误信息

错误块1:类型解析与绑定生成警告

#14 1702.8   [100%] Generate files for Python bindings and documentation                              
#14 1704.0   /tmp/pip-install-jdnrgs2i/opencv-python_a75af04f83144d719ab5328e2c3bcd30/opencv/modules/
python/src2/typing_stubs_generator.py:54: UserWarning: Typing stubs generation has failed.           
#14 1704.0   Traceback (most recent call last):                                                       
#14 1704.0     File "/tmp/pip-install-jdnrgs2i/opencv-python_a75af04f83144d719ab5328e2c3bcd30/opencv/
modules/python/src2/typing_stubs_generation/nodes/type_node.py", line 291, in resolve                
#14 1704.0       self.value.resolve(root)                                                             
#14 1704.0     File "/tmp/pip-install-jdnrgs2i/opencv-python_a75af04f83144d719ab5328e2c3bcd30/opencv/
modules/python/src2/typing_stubs_generation/nodes/type_node.py", line 628, in resolve                
#14 1704.0       self.full_typename, errors                                                           
#14 1704.0   typing_stubs_generation.nodes.type_node.TypeResolutionError: Failed to resolve one of "_
typing.Union[cv2.typing.Scalar, GMat, GOpaqueT, GArrayT]" items. Errors: ['Failed to resolve "GMat" e
xposed as "GMat"', 'Failed to resolve "GOpaqueT" exposed as "GOpaqueT"', 'Failed to resolve "GArrayT"
exposed as "GArrayT"']                                                                              
#14 1704.0                                                                                            
#14 1704.0   The above exception was the direct cause of the following exception:                     
#14 1704.0                                                                                            
#14 1704.0   Traceback (most recent call last):                                                       
#14 1704.0     File "/tmp/pip-install-jdnrgs2i/opencv-python_a75af04f83144d719ab5328e2c3bcd30/opencv/
modules/python/src2/typing_stubs_generator.py", line 49, in wrapped_func                              
#14 1704.0       ret_type = func(*args, **kwargs)                                                     
#14 1704.0     File "/tmp/pip-install-jdnrgs2i/opencv-python_a75af04f83144d719ab5328e2c3bcd30/opencv/
modules/python/src2/typing_stubs_generator.py", line 148, in _generate                                
#14 1704.0       generate_typing_stubs(self.cv_root, output_path)                                     
#14 1704.0     File "/tmp/pip-install-jdnrgs2i/opencv-python_a75af04f83144d719ab5328e2c3bcd30/opencv/
modules/python/src2/typing_stubs_generation/generation.py", line 91, in generate_typing_stubs        
#14 1704.0       _generate_typing_module(root, output_path)                                           
#14 1704.0     File "/tmp/pip-install-jdnrgs2i/opencv-python_a75af04f83144d719ab5328e2c3bcd30/opencv/
modules/python/src2/typing_stubs_generation/generation.py", line 794, in _generate_typing_module     
#14 1704.0       node.resolve(root)                                                                   
#14 1704.0     File "/tmp/pip-install-jdnrgs2i/opencv-python_a75af04f83144d719ab5328e2c3bcd30/opencv/
modules/python/src2/typing_stubs_generation/nodes/type_node.py", line 297, in resolve
#14 1704.0       ) from e 
#14 1704.0   typing_stubs_generation.nodes.type_node.TypeResolutionError: Failed to resolve alias "GP
rotoArg" exposed as "GProtoArg"
#14 1704.0 
#14 1704.0     traceback.format_exc()
#14 1704.0   Note: Class cv::Feature2D has more than 1 base class (not supported by Python C extensio
ns)
#14 1704.0         Bases:  cv::Algorithm, cv::class, cv::Feature2D, cv::Algorithm
#14 1704.0         Only the first base class will be used
#14 1704.0   Note: Class cv::detail::GraphCutSeamFinder has more than 1 base class (not supported by 
Python C extensions)
#14 1704.0         Bases:  cv::detail::GraphCutSeamFinderBase, cv::detail::SeamFinder
#14 1704.0   [100%] Built target gen_opencv_python_source
#14 1704.1   [100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp
.o
#14 1779.0   [100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_uti
l.cpp.o
#14 1780.1   [100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_num
py.cpp.o
#14 1781.1   [100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_con
vert.cpp.o
#14 1782.7   [100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_hig
hgui.cpp.o
#14 1783.9   [100%] Linking CXX shared module ../../lib/python3/cv2.cpython-36m-x86_64-linux-gnu.so
#14 1787.9   [100%] Built target opencv_python3

错误块2:文件复制失败导致构建终止

#14 1788.3   Copying files from CMake output                                                          
#14 1788.3   Traceback (most recent call last):                                                       
#14 1788.3     File "/usr/local/lib/python3.6/dist-packages/pip/_vendor/pep517/in_process/_in_process
.py", line 363, in <module>                                                                           
#14 1788.3       main()                                                                               
#14 1788.3     File "/usr/local/lib/python3.6/dist-packages/pip/_vendor/pep517/in_process/_in_process
.py", line 345, in main                                                                               
#14 1788.3       json_out['return_val'] = hook(**hook_input['kwargs'])                                
#14 1788.3     File "/usr/local/lib/python3.6/dist-packages/pip/_vendor/pep517/in_process/_in_process
.py", line 262, in build_wheel                                                                        
#14 1788.3       metadata_directory)                                                                 
#14 1788.3     File "/usr/local/lib/python3.6/dist-packages/setuptools/build_meta.py", line 231, in b
uild_wheel                                                                                            
#14 1788.3       wheel_directory, config_settings)                                                    
#14 1788.3     File "/usr/local/lib/python3.6/dist-packages/setuptools/build_meta.py", line 215, in _
build_with_temp_dir                                                                                   
#14 1788.3       self.run_setup()                                                                     
#14 1788.3     File "/usr/local/lib/python3.6/dist-packages/setuptools/build_meta.py", line 268, in r
un_setup                                                                                              
#14 1788.3       self).run_setup(setup_script=setup_script)                                           
#14 1788.3     File "/usr/local/lib/python3.6/dist-packages/setuptools/build_meta.py", line 158, in r
un_setup                                                                                              
#14 1788.3       exec(compile(code, __file__, 'exec'), locals())                                      
#14 1788.3     File "setup.py", line 537, in <module>                                                 
#14 1788.3       main()                                                                               
#14 1788.3     File "setup.py", line 310, in main                                                     
#14 1788.3       cmake_source_dir=cmake_source_dir,                                                   
#14 1788.3     File "/tmp/pip-build-env-9wbzljs3/overlay/lib/python3.6/site-packages/skbuild/setuptoo
ls_wrap.py", line 683, in setup                                                                       
#14 1788.3       cmake_install_dir,                                                                   
#14 1788.3     File "setup.py", line 450, in _classify_installed_files_override                       
#14 1788.3       raise Exception("Not found: '%s'" % relpath_re)                                      
#14 1788.3   Exception: Not found: 'python/cv2/python-3/cv2.*'                                        
#14 1788.3   Building wheel for opencv-python (pyproject.toml): finished with status 'error'         
#14 1788.3   ERROR: Failed building wheel for opencv-python
#14 1788.3   Created temporary directory: /tmp/pip-wheel-zsi8p8ua
#14 1788.3   Building wheel for future (setup.py): started
#14 1788.3   Destination directory: /tmp/pip-wheel-zsi8p8ua

解决方案

核心原因

  1. 基础镜像tensorflow/tensorflow:1.14.0-gpu-py3基于Ubuntu 16.04,强行替换为Ubuntu 20.04的CUDA源会导致依赖环境混乱
  2. 系统已安装python3-opencv,但pip install仍尝试编译最新版OpenCV,版本冲突导致编译路径不匹配

修改后的Dockerfile

FROM tensorflow/tensorflow:1.14.0-gpu-py3

ENV TZ="America/Los_Angeles"
ARG DEBIAN_FRONTEND=noninteractive

# 保留原镜像的CUDA配置,避免环境冲突
RUN apt-get update && apt-get install -y --no-install-recommends git python3-opencv

# 设置构建目录并复制代码
RUN mkdir /build
COPY baselines/ /build/baselines
WORKDIR /build/baselines

# 升级工具后,跳过OpenCV编译,直接使用系统版本
RUN pip3 install --upgrade pip setuptools wheel
RUN pip3 install -e . -vvv --ignore-installed opencv-python

关键修改点

  • 移除CUDA源替换步骤:原镜像的CUDA配置适配Ubuntu 16.04,替换后会引发依赖冲突
  • 添加--ignore-installed opencv-python:告诉pip不重新编译OpenCV,直接使用系统已安装的版本
  • 若需通过pip安装OpenCV,可在安装前指定兼容Python 3.6的旧版本:
    RUN pip3 install opencv-python==4.5.5.62
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:52:03