将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"]
相关推荐
brzhang22 分钟前
AI Agent 干不好活,不是它笨,告诉你一个残忍的现实,是你给他的工具太难用了
前端·后端·架构
brzhang27 分钟前
一文说明白为什么现在 AI Agent 都把重点放在上下文工程(context engineering)上?
前端·后端·架构
罗亚方舟2 小时前
微服务故障排查
微服务·云原生·架构
深度学习实战训练营2 小时前
MnasNet:NAS 自动架构搜索
架构
hello_2506 小时前
云原生架构与GitOps技术栈介绍
云原生·架构
赵渝强老师10 小时前
【赵渝强老师】MongoDB的分布式存储架构
分布式·mongodb·架构
Tadas-Gao10 小时前
微服务可观测性的“1-3-5”理想:从理论到实践的故障恢复体系
java·开发语言·微服务·云原生·架构·系统架构·可观测
数据智能老司机10 小时前
建构 AI Agent 应用——Agentic 系统的学习机制
架构·llm·agent
brzhang11 小时前
把网页的“好句子”都装进侧边栏:我做了个叫 Markbox 的收藏器,开源!
前端·后端·架构
上园村蜻蜓队长11 小时前
ARM芯片架构之coresight 时间戳组件介绍
arm开发·架构