一、报错分析
从报错信息来看,在启动 uvicorn 服务并尝试导入相关模块的过程中出现了一系列问题,最终导致了 ImportError,关键错误信息为 "No module named 'numpy.core._multiarray_umath'",这表明在导入 numpy 模块的过程中,无法找到 numpy.core._multiarray_umath 这个子模块,可能是由于以下几种原因:
- mkl-service 包未安装或相关初始化问题
一开始出现了关于 mkl-service 包的警告信息:
plaintext
F:\Anaconda3\envs\env36\lib\site-packages\numpy_init _.py:140: UserWarning: mkl-service package failed to import, therefore Intel® MKL initialization ensuring its correct out-of-the box operation under condition when Gnu OpenMP had already been loaded by Python process is not assured. Please install mkl-service package, see http://github.com/IntelPython/mkl-service
from. import _distributor_init
这表明 mkl-service 包未能成功导入,可能会影响到 numpy 以及后续依赖 numpy 的模块(如 tensorflow)的正常运行,因为 mkl-service 包在某些情况下与 numpy 的初始化及正确运行相关。 - numpy 模块本身的安装或配置问题
最终的 ImportError 显示无法导入 numpy.core._multiarray_umath,这可能是由于 numpy 本身安装不完整、版本不兼容或者与其他库(如 tensorflow)的依赖关系存在冲突等原因导致的。
二、解决办法
- 安装 mkl-service 包
按照警告信息的提示,首先尝试安装 mkl-service 包,在当前 env36 环境下的命令行中执行以下命令:
bash
运行
pip install mkl-service
或者如果是使用 conda 管理环境,可以执行:
bash
运行
conda install mkl-service
安装完成后,再次尝试启动 uvicorn 服务,看是否还会出现相关报错。 - 检查并修复 numpy 的安装
重新安装 numpy:
先卸载当前环境中的 numpy 包,可以通过以下命令(根据使用的包管理工具选择):
如果是使用 pip:
bash
运行
pip uninstall numpy
如果是使用 conda:
bash
运行
conda uninstall numpy
然后重新安装 numpy,同样根据包管理工具选择合适的命令:
如果是使用 pip:
bash
运行
pip install numpy
如果是使用 conda:
bash
运行
conda install numpy
检查 numpy 版本兼容性:
当前环境中的 numpy 版本是 "1.18.5",有些较新的库(如 tensorflow)可能对 numpy 的版本有一定要求。可以查看相关库(如 tensorflow)的官方文档,了解其推荐的 numpy 版本范围。
如果发现当前 numpy 版本不在推荐范围内,可以尝试升级或降级 numpy 的版本。例如,如果需要升级,可以通过以下命令(根据包管理工具选择):
如果是使用 pip:
bash
运行
pip install --upgrade numpy
如果是使用 conda:
bash
运行
conda install --upgrade numpy
反之,如果需要降级,可以先查找合适的版本号(例如通过 pip search numpy 或 conda search numpy),然后再按照安装命令加上版本号进行安装。比如,要安装版本为 "1.19.5" 的 numpy(假设通过 pip 安装),可以执行:
bash
运行
pip install numpy==1.19.5 - 检查其他依赖库的兼容性
由于报错是在导入 tensorflow 等一系列模块的过程中出现的,所以还需要检查 tensorflow 与 numpy、mkl-service 等其他相关库的兼容性。
查看 tensorflow 官方文档:了解 tensorflow 对 numpy、mkl-service 等库的版本要求以及可能存在的已知兼容性问题。
更新或调整相关库版本:根据官方文档的提示,如果发现存在不兼容的情况,可以通过上述的包管理工具( pip 或 conda)来更新或调整相关库的版本,使其达到兼容状态。
通过以上步骤的排查和处理,应该可以解决目前遇到的模块导入报错问题,从而成功启动 uvicorn 服务。