将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 小时前
优化App启动时间?startup-coroutine是什么?
性能优化·架构·kotlin
JienDa3 小时前
JienDa聊PHP:CSDN博客仿站实战中PHP框架的协同架构方略
java·架构·php
刘一说4 小时前
Nacos 与 Spring Cloud Alibaba 集成详解:依赖、配置、实战与避坑指南
spring boot·spring cloud·微服务·架构
周杰伦_Jay5 小时前
【Go 语言主流 Web】 框架详细解析
开发语言·后端·微服务·架构·golang
闲人编程5 小时前
Django微服务架构:单体应用拆分解耦实践
微服务·架构·消息队列·django·api·通信·codecapsule
颜颜yan_6 小时前
基于CANN多Stream异步执行的智能推理管道:突破传统串行瓶颈
运维·架构·stream·昇腾·cann
吴法刚7 小时前
Gemini cli 源码分析之-Agent分析-Agent架构系统分析
架构·agent·ai编程·gemini
拾忆,想起7 小时前
Dubbo服务超时与重试策略配置指南:构建 resilient 微服务架构
服务器·网络·微服务·云原生·架构·dubbo
q***51897 小时前
【语义分割】12个主流算法架构介绍、数据集推荐、总结、挑战和未来发展
算法·架构
车载诊断技术7 小时前
电子电气架构 --- 国外对于EE架构的设计方案(上)
架构·汽车·硬件架构·电子电气架构·整车eea简述