将indextts封装到docker容器中

前段时间学习了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"]
相关推荐
她的男孩1 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
狗哥哥3 小时前
地图渲染模块架构设计文档
架构
ethantan14 小时前
AI Agent 组成:像人一样思考的智能体
人工智能·程序员·架构
Cosolar17 小时前
vLLM 生产级部署完全指南
人工智能·后端·架构
云上工程笔记18 小时前
从 0 到 1 配 OpenCode 多 Agent:7 个角色协作、视觉委托与权限隔离实战
架构
王二端茶倒水18 小时前
从千兆到万兆:宽带运营不能只卖套餐,要管用户生命周期从千兆到万兆:宽带运营需要管理用户生命周期
后端·网络协议·架构
锋行天下19 小时前
半秒开!还有谁!!!
前端·vue.js·架构
这个DBA有点耶21 小时前
SQL改写进阶:标量子查询的“隐形代价”与消除实战
数据库·mysql·架构