有把modelscope-funasr和kantts打包到docker的方法吗?每次都是在这里报错 50.22 Successfully built sox
50.22 Failed to build pysptk
82 | RUN pip install -U funasr modelscope
83 | RUN pip install ttsfrd -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
84 | >>> RUN pip install kantts -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
85 |
ERROR: failed to solve: process "/bin/sh -c pip install kantts -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html" did not complete successfully: exit code: 1
要将 modelscope-funasr
和 kantts
打包到 Docker 中,您需要解决两个主要问题:依赖安装失败和 Dockerfile 的正确配置。以下是详细的解决方案:
根据报错信息:
ERROR: Could not build wheels for pysptk, which is required to install pyproject.toml-based projects
这表明在安装 pysptk
时,构建轮子(wheel)失败了。pysptk
是一个依赖 C++ 编译的 Python 包,通常需要系统中安装编译工具链(如 GCC、Make 等)以及相关的开发库。
此外,Docker 默认的基础镜像可能缺少这些工具链,导致安装失败。
为了确保能够成功安装 pysptk
和其他依赖项,建议使用包含完整开发工具链的基础镜像。例如,可以选择基于 python:3.9-slim
或 python:3.9-buster
的镜像,它们提供了更完整的环境支持。
FROM python:3.9-buster
在安装 Python 包之前,先安装必要的系统依赖项。pysptk
需要以下依赖: - build-essential
:提供 GCC 和 Make 工具。 - libsndfile1-dev
:用于音频文件处理。 - libsamplerate0-dev
:用于音频采样率转换。
在 Dockerfile 中添加以下命令:
RUN apt-get update && apt-get install -y \
build-essential \
libsndfile1-dev \
libsamplerate0-dev \
&& rm -rf /var/lib/apt/lists/*
按照正确的顺序安装 Python 包,并确保使用 -f
参数指定 ModelScope 的自定义仓库地址。为了避免多次运行 pip install
命令,可以将所有依赖合并到一个 RUN
指令中,以减少镜像层数。
RUN pip install --upgrade pip && \
pip install -U funasr modelscope ttsfrd kantts jieba \
-f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
在 Dockerfile 中添加一条验证命令,确保所有依赖已正确安装:
RUN python -c "import funasr; import kantts; import ttsfrd; import jieba"
以下是完整的 Dockerfile 示例,整合了上述所有步骤:
# 使用官方 Python 基础镜像
FROM python:3.9-buster
# 安装系统依赖
RUN apt-get update && apt-get install -y \
build-essential \
libsndfile1-dev \
libsamplerate0-dev \
&& rm -rf /var/lib/apt/lists/*
# 安装 Python 依赖
RUN pip install --upgrade pip && \
pip install -U funasr modelscope ttsfrd kantts jieba \
-f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
# 验证安装
RUN python -c "import funasr; import kantts; import ttsfrd; import jieba"
# 设置工作目录
WORKDIR /app
# 复制应用代码到容器中
COPY . /app
# 启动命令(根据实际需求修改)
CMD ["python", "your_script.py"]
在包含 Dockerfile 的目录下运行以下命令:
docker build -t your-image-name:tag .
启动容器并验证是否正常运行:
docker run -it your-image-name:tag bash
进入容器后,运行以下命令检查依赖是否正确安装:
python -c "import funasr; import kantts; import ttsfrd; import jieba"
如果没有任何错误输出,则说明安装成功。
由于 pysptk
需要从源码编译,可能会导致构建时间较长。可以通过以下方式优化: - 使用预编译的 pysptk
轮子文件(如果有)。 - 在本地构建好镜像后,上传到 Docker Registry,避免重复构建。
如果在拉取依赖时遇到网络问题,可以配置阿里云的镜像加速器:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://hd1esep4.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
通过以上步骤,您可以成功将 modelscope-funasr
和 kantts
打包到 Docker 中,并解决 pysptk
构建失败的问题。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。