Docker中安装snips-nlu失败,报distutils.msvccompiler缺失错误
Docker Ubuntu 20.04 安装 snips-nlu 的替代方案
方案1:补全系统编译依赖与distutils组件
Linux环境下出现distutils.msvccompiler错误,本质是缺少Python distutils组件,同时scikit-learn源码编译需要系统级编译工具。修改安装脚本,先安装必要的系统依赖:
# 安装系统编译工具和Python distutils apt update && apt install -y python3-distutils gcc g++ gfortran libopenblas-dev liblapack-dev # 执行原有依赖安装流程 pip3 install numpy scipy curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y pip3 install setuptools-rust source ~/.cargo/env pip3 install snips-nlu
方案2:用预编译Wheel包跳过源码编译
让pip优先使用预编译的二进制包,绕开scikit-learn的源码编译环节:
pip3 install numpy scipy curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y pip3 install setuptools-rust source ~/.cargo/env # 强制使用预编译包 pip3 install --only-binary :all: scikit-learn snips-nlu
如果找不到匹配Python3.10的scikit-learn预编译包,可以指定兼容版本:
pip3 install --only-binary :all: scikit-learn==1.1.3 snips-nlu
方案3:直接使用现成的snips-nlu Docker镜像
无需手动编译,直接拉取现成镜像运行:
# 拉取官方镜像 docker pull snips/snips-nlu:latest # 启动交互容器 docker run -it snips/snips-nlu:latest /bin/bash
若官方镜像不符合环境需求,可编写自定义Dockerfile基于Ubuntu20.04构建:
FROM ubuntu:20.04 ENV DEBIAN_FRONTEND=noninteractive ENV PYTHON_VERSION=3.10.4 # 安装系统依赖与Python3.10 RUN apt update && apt install -y \ python3.10 python3.10-dev python3-pip python3-distutils \ gcc g++ gfortran libopenblas-dev liblapack-dev \ curl && \ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 # 安装rust与snips-nlu依赖 RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \ echo "source ~/.cargo/env" >> ~/.bashrc && \ /root/.cargo/bin/rustup update && \ pip3 install numpy scipy setuptools-rust snips-nlu CMD ["/bin/bash"]
构建并运行镜像:
docker build -t my-snips-nlu . docker run -it my-snips-nlu
内容的提问来源于stack exchange,提问作者Drjslab
相关产品推荐
相关产品推荐

