|
项目场景及问题描述在不联网的服务器上的Docker容器内运行Python程序,Python版本是3.8版本。安装的opencv-python是这一版:opencv_python-4.7.0.68-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl程序部分importcv2出现报错:ImportError:libGL.so.1:cannotopensharedobjectfile:Nosuchfileordirectory具体如下:>>>importcv2Traceback(mostrecentcalllast):File"",line1,inFile"/usr/local/lib/python3.8/dist-packages/cv2/__init__.py",line181,inbootstrap()File"/usr/local/lib/python3.8/dist-packages/cv2/__init__.py",line153,inbootstrapnative_module=importlib.import_module("cv2")File"/usr/lib/python3.8/importlib/__init__.py",line127,inimport_modulereturn_bootstrap._gcd_import(name[level:],package,level)ImportError:libGL.so.1:cannotopensharedobjectfile:Nosuchfileordirectory12345678910原因分析:出现这种情况的原因主要是因为使用Docker构建应用时缺少cv2的依赖。可以通过安装所需的附加依赖项来解决此错误。解决方案:方案一:通过安装opencv-python-headless,它会安装所有相关的依赖项,解决这种报错。opencv-python-headless包含没有外部依赖项的预编译二进制轮(除了numpy),并且适用于Docker等无头环境。以我使用的版本为例,opencv-python安装的版本如下:opencv_python-4.7.0.68-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl因此安装了对应版本的opencv-python-headless:opencv_python_headless-4.7.0.68-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl解决了报错问题。该方案对不联网环境比较友好,只需要有对应安装包即可。方案二:安装依赖项libgl1。用如下指令:apt-getupdate&apt-getinstalllibgl11方案三:安装cv2依赖。只需将以下代码添加到您的行DockerFile中即可解决此问题。RUNapt-getupdateRUNapt-getinstallffmpeglibsm6libxext6-y12可确保更新软件包并安装运行所需的其他软件包cv2。方案四:安装mesa-libGL.x86_64。yuminstallmesa-libGL.x86_64参考:Importerror:libgl.so.1:cannotopensharedobjectfile:nosuchfileordirectoryImportError:libGL.so.1:cannotopensharedobjectfile
|
|