已安装cfgrib/ecmwflibs仍遇ModuleNotFoundError的技术求助
问题排查:Python脚本导入已安装库失败
问题场景
- 通过SH文件执行命令:
python3.6 Scriptfile.py /route - 脚本核心内容:
import os import xarray as xr import ecmwflibs import cfgrib import sys data_path = r'/grib' + '/' ds = xr.open_mfdataset(data_path+'*',engine="cfgrib", combine = 'nested', backend_kwargs={'filter_by_keys': {'stepType': 'accum'}}, concat_dim='step')
错误信息
- 未注释
import ecmwflibs时:
Traceback (most recent call last): File "Scriptfile.py", line 20, in <module> import ecmwflibs ModuleNotFoundError: No module named 'ecmwflibs'
- 注释
import ecmwflibs后:
Traceback (most recent call last): File "Scriptfile.py", line 20, in <module> import cfgrib ModuleNotFoundError: No module named 'cfgrib'
已确认的依赖安装情况
执行python3.6 -m pip list | egrep "(eccodes|ecmwflib|cfgrib)",输出显示相关库已安装:
$ python3.6 -m pip list | egrep "(eccodes|ecmwflib|cfgrib)" cfgrib 0.9.10.0 eccodes 1.2.0 ecmwflibs 0.5.0 pyeccodes 0.1.1
当前PATH配置
/home/XXXX/.local/bin: /home/XXXX/bin: /home/XXXX/.local/bin: /home/XXXX/bin: /home/XXXX/.local/bin: /home/XXXX/bin: /home/XXXX/miniconda3/bin: /home/XXXX/miniconda3/condabin: /home/XXXX/.local/bin: /home/XXXX/bin: /sbin: /bin: /usr/bin: /usr/local/bin: /usr/local/sbin: /usr/sbin
排查与解决建议
- 验证Python解释器一致性:分别执行
which python3.6和python3.6 -c "import sys; print(sys.executable)",确认SH脚本调用的python3.6与执行pip list的解释器路径完全一致。若不一致,修改SH文件中的命令为正确的解释器路径。 - 检查库的安装路径是否在Python搜索路径中:执行
python3.6 -m pip show cfgrib获取库的安装目录,再执行python3.6 -c "import sys; print(sys.path)",确认安装目录是否在输出的路径列表中。若不在,可在脚本开头添加sys.path.append("库的安装目录路径"),或使用对应解释器的pip重新安装。 - 整理重复的PATH条目:当前PATH存在大量重复的
/home/XXXX/.local/bin和/home/XXXX/bin,虽然不一定直接触发问题,但可能影响环境优先级。建议清理重复条目,确保miniconda3的bin目录优先级正确(若使用conda环境)。 - 确认conda环境激活状态:若使用miniconda管理环境,需在SH文件中先执行
source /home/XXXX/miniconda3/bin/activate 环境名称激活对应环境,再运行Python脚本。 - 强制重装依赖:若以上步骤无效,执行
python3.6 -m pip install --force-reinstall cfgrib ecmwflibs重新安装库,确保安装过程无报错。
内容的提问来源于stack exchange,提问作者Tomas
相关产品推荐
相关产品推荐

