将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"]
相关推荐
聚搜云——JuSouClouD12 分钟前
阿里云代理商能帮忙设计架构方案吗?有哪些增值服务
阿里云·架构·云计算
白远山1 小时前
智慧场馆解决方案软件开发实战:从架构设计到落地部署指南
java·开发语言·架构·需求分析
m0_587383001 小时前
折扣卡CPS软件开发实战:从系统架构设计到上线指南
java·小程序·架构·需求分析
Dawson Zhu1 小时前
基于 OKF 知识图谱的 Text2SQL 领域知识注入实践——半导体晶圆厂数据资产知识库 MVP 剖析
人工智能·语言模型·架构·aigc·agi
晚安日记wanna2 小时前
批量请求失败只弹一个 Toast面试官想听五层
前端·面试·架构
大模型码小白2 小时前
告别造假数据,直接连数据库查真实时序数据喂给 TimechoAI 大模型
java·数据库·人工智能·microsoft·架构
晚安日记wanna2 小时前
大表 DDL 面试翻车现场Online DDL 为什么还会锁死业务
数据库·面试·架构
晚安日记wanna2 小时前
MySQL 主从延迟别只答并行复制
数据库·面试·架构
狼与自由2 小时前
MCP协议理解
人工智能·架构
天远API4 小时前
零信任架构实战:基于天远单人婚姻查询构建自动化联合贷款审计网关
java·人工智能·架构·自动化