yolov8环境问题
在docker环境下安装gdal后,使用yolov8官方库时gdal会找不到;详情如下:
使用conda install gdal后再使用pip install ultralytics后会报以下错误:
ModuleNotFoundError: No module named ‘_gdal’
百度查找是找不到conda的lib下的文件;
详细报错
Traceback (most recent call last):
File "/opt/conda/lib/python3.8/site-packages/osgeo/__init__.py", line 30, in swig_import_helper
return importlib.import_module(mname)
File "/opt/conda/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 657, in _load_unlocked
File "<frozen importlib._bootstrap>", line 556, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 1166, in create_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /opt/conda/lib/python3.8/site-packages/osgeo/../../../libgdal.so.32)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "detect_cut_final.py", line 9, in <module>
from RS_Utils_final import *
File "/mnt/zhisuan_nfs/dev-geovis-ai/appnfs/org_33/xt_jokbsa/code/yolov8-1/RS_Utils_final.py", line 4, in <module>
from osgeo import gdal, ogr
File "/opt/conda/lib/python3.8/site-packages/osgeo/__init__.py", line 46, in <module>
_gdal = swig_import_helper()
File "/opt/conda/lib/python3.8/site-packages/osgeo/__init__.py", line 43, in swig_import_helper
return importlib.import_module('_gdal')
File "/opt/conda/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_gdal'
由报错可以看出是找不到/opt/conda/lib/python3.8/site-packages/osgeo/…/…/…/libgdal.so.32;
解决
在~/.bashrc中添加安装的conda lib位置的环境变量;
export LD_LIBRARY_PATH=/opt/conda/lib:$LD_LIBRARY_PATH
或者在使用脚本前添加环境
export LD_LIBRARY_PATH=/opt/conda/lib:$LD_LIBRARY_PATH && python detect.py
还有一种可能是在安装ultralytics时,升级了numpy导致的(因为在安装ultralytics前gdal是可用的);可以降级numpy试试,或者安装低版本ultralytics
openmmlab问题
使用conda install gdal 后报同上类似的错,但使用上述解决方案不行
报错
Traceback (most recent call last):
File "/opt/conda/lib/python3.8/site-packages/osgeo/__init__.py", line 30, in swig_import_helper
return importlib.import_module(mname)
File "/opt/conda/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 657, in _load_unlocked
File "<frozen importlib._bootstrap>", line 556, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 1101, in create_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: libpoppler.so.126: cannot open shared object file: No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "demo/detect_cut_final.py", line 25, in <module>
from demo.cloud_drive_util import *
File "./demo/cloud_drive_util.py", line 17, in <module>
from osgeo import gdal
File "/opt/conda/lib/python3.8/site-packages/osgeo/__init__.py", line 46, in <module>
_gdal = swig_import_helper()
File "/opt/conda/lib/python3.8/site-packages/osgeo/__init__.py", line 43, in swig_import_helper
return importlib.import_module('_gdal')
File "/opt/conda/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_gdal'
解决方案
分析:使用openmmlab环境比较老,直接使用conda install gdal 进行安装安装的版本过高3.6.2;
解决降低gdal版本先试用conda search gdal查看gdal能安装那些版本;conda search gdal==3.4.0安装第一版本就可以了;