前段时间学习了b站开源的index-tts代码,在本地测试了一下,发现macbook也可以正常使用,只是安装组件时老是有问题,为了方便后面使用,我想将这个封装到docker容器中,于这就是出现了很多的问题原因,每个问题都问了一下trae,大部分的答案都是答非所问,但它在自动生成代码方面确实不要太舒服了。
效果


docker
正如Docker他们宣传的一样: 镜像本质是跨平台的文件系统打包 ,其兼容性主要与硬件架构 (而非具体设备如 MacBook)相关,但是他们后面又加了一下:不过,由于 MacBook 分为 Intel 芯片(x86_64/amd64 架构) 和 Apple Silicon 芯片(ARM64 架构,如 M1/M2/M3) ,选择镜像时需要注意架构兼容性 。 其本质就是说我的架构同硬件没有关系,只是组件他们不支持兼容而已,大家都知道做硬件的总是希望软件来支持,做平台的总是期望软件来自适配,而不是他们自已本身的改动来适配。
镜像选择
对于python的镜像,其实有很多,我试过了slim (精简版 Debian/Ubuntu),alpine(Alpine linux轻量版),但无一都是失败的,主要都是在安装WeTextProcessing及其它各种组件时出现c库的冲突。
C库的影响
1,找不到No module named 'tn',这里的tn是WeTextProcessing组件安装后生成了,不是真实的tn组件 2,还有安装WeTextProcessing时c库一直出错
总结
下面是我解决问题的一种方式,重新读了一下indextts库的readme,他们这种就是使用conda来安装大部分的组件,那我是不是应当找一个conda管理的镜像包呢,于是就找到了
dockerfile
# 使用Miniconda3作为基础镜像
FROM continuumio/miniconda3:latest
在安装WeTextProcessing时,加上了--no-deps参数
dockerfile
RUN /bin/bash -c "source activate py310 && \
pip install WeTextProcessing --no-deps -i https://pypi.tuna.tsinghua.edu.cn/simple \
--trusted-host pypi.tuna.tsinghua.edu.cn --timeout 180"
总的dockerfile文件如下
dockerfile
# 使用官方Python镜像作为基础,标签含 "alpine", 明确基于Alpine系统
# 使用Miniconda3作为基础镜像
FROM continuumio/miniconda3:latest
# 设置工作目录
WORKDIR /app
# 安装系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
g++ \
make \
git \
libfst-dev \
ffmpeg \
&& rm -rf /var/lib/apt/lists/*
# 创建Python 3.10环境
RUN conda create -n py310 python=3.10 -y
# 安装Cython(pynini依赖)
RUN /bin/bash -c "source activate py310 && \
pip install -i https://mirrors.aliyun.com/pypi/simple \
--trusted-host mirrors.aliyun.com \
Cython"
# 安装pynini (使用已知兼容的2.1.6.post1版本)并配置conda缓存和国内镜像源
RUN /bin/bash -c "source activate py310 && \
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \
conda config --set show_channel_urls yes && \
conda config --set always_yes yes --set changeps1 no && \
conda config --set channel_priority strict && \
conda install -c conda-forge pynini==2.1.6.post1"
# 复制requirements.txt文件
COPY requirements.txt .
# 安装Python依赖
# 先安装指定版本的torch以避免哈希值不匹配问题
# 使用阿里云镜像源来替代清华源,解决403 Forbidden问题
RUN /bin/bash -c "source activate py310 && \
pip install torch==2.0.1 --index-url https://download.pytorch.org/whl/cu118 --timeout 180"
# 然后安装剩余依赖
RUN /bin/bash -c "source activate py310 && \
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \
conda config --set show_channel_urls yes && \
conda config --set always_yes yes --set changeps1 no && \
conda config --set channel_priority strict && \
conda install -c conda-forge importlib_resources "
RUN /bin/bash -c "source activate py310 && \
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple \
--trusted-host pypi.tuna.tsinghua.edu.cn --timeout 180"
RUN /bin/bash -c "source activate py310 && \
pip install WeTextProcessing --no-deps -i https://pypi.tuna.tsinghua.edu.cn/simple \
--trusted-host pypi.tuna.tsinghua.edu.cn --timeout 180"
# 复制项目文件
COPY . .
# 创建非root用户
RUN useradd -m appuser
# 修改文件所有权
RUN chown -R appuser:appuser /app
# 切换到非root用户
USER appuser
# 暴露Gradio默认端口
EXPOSE 7861
# 运行Gradio应用
CMD ["/bin/bash", "-c", "source activate py310 && python gradio_frontend.py"]