You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Modal Notebooks安装Miniconda或切换Python至3.11?

在Modal Notebooks中运行Chatterbox TTS的可行方案

核心问题分析

Modal Notebooks默认使用Python 3.12,而Chatterbox依赖的numpy==1.25.2无法在Python 3.12中构建(因Python 3.12移除了distutils)。同时Modal环境存在以下限制:

  • 系统Python为外部管理环境,无法直接安装包
  • 无sudo权限,无法修改系统级配置
  • 独立shell会话的环境变量不持久

以下是三种可行的解决方法:


方案1:使用Modal自定义镜像指定Python 3.11

Modal支持为函数指定自定义镜像,可直接基于Python 3.11镜像构建运行环境,完全避开Notebook默认的Python 3.12环境:

import modal

# 构建包含Chatterbox依赖的Python 3.11镜像
image = modal.Image.from_registry("python:3.11-slim") \
    .apt_install("gcc", "g++", "git")  # 安装编译依赖
    .pip_install("chatterbox", "numpy==1.25.2")

# 定义使用该镜像的函数
@modal.function(image=image)
def generate_tts(text):
    from chatterbox import TTS
    tts = TTS()
    return tts.generate(text)

# 在Notebook中调用函数
result = generate_tts("测试文本").remote()
print(result)

这种方法利用Modal的容器隔离特性,函数运行在独立的Python 3.11环境中,无需修改Notebook的会话环境。


方案2:在Notebook会话中创建Python 3.11虚拟环境

通过pyenv在用户目录安装Python 3.11并创建虚拟环境,绕过外部管理环境的限制:

  1. 安装pyenv及编译依赖(无需sudo,仅在用户目录安装):
curl https://pyenv.run | bash
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
apt-get update && apt-get install -y --no-install-recommends build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev
  1. 安装Python 3.11并创建虚拟环境:
pyenv install 3.11.8
pyenv virtualenv 3.11.8 chatterbox-env
pyenv activate chatterbox-env
pip install chatterbox numpy==1.25.2
  1. 运行Chatterbox代码:
# 确保在激活的虚拟环境中运行
from chatterbox import TTS
tts = TTS()
print(tts.generate("测试文本"))

方案3:正确配置Miniconda环境

解决之前PATH不持久的问题,将所有conda相关操作放在同一个shell会话或Python subprocess中:

import subprocess
import os

# 下载并安装Miniconda到用户目录
subprocess.run(["wget", "https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh"], check=True)
subprocess.run(["bash", "Miniconda3-latest-Linux-x86_64.sh", "-b", "-p", os.path.expanduser("~/miniconda")], check=True)

# 将conda路径加入环境变量
conda_bin_path = os.path.expanduser("~/miniconda/bin")
os.environ["PATH"] = f"{conda_bin_path}:{os.environ['PATH']}"

# 创建Python 3.11环境并安装依赖
subprocess.run(["conda", "create", "-n", "chatterbox-env", "python=3.11", "-y"], check=True)
subprocess.run(["conda", "run", "-n", "chatterbox-env", "pip", "install", "chatterbox", "numpy==1.25.2"], check=True)

# 在conda环境中运行Chatterbox代码
subprocess.run(
    ["conda", "run", "-n", "chatterbox-env", "python", "-c", 
     "from chatterbox import TTS; tts = TTS(); print(tts.generate('测试文本'))"],
    check=True
)

这种方法通过Python进程统一管理环境变量,确保conda命令能被正确找到。


Modal环境关键限制说明

  1. 外部管理环境:默认系统Python为externally-managed,禁止直接安装包,必须使用虚拟环境或自定义镜像。
  2. 无sudo权限:所有软件安装必须在用户目录下进行,无法修改系统级文件。
  3. 独立shell会话:每个!命令对应独立的shell,环境变量不会跨会话保留,需将相关命令合并执行或通过Python设置全局环境变量。

内容的提问来源于stack exchange,提问作者Zulqarnain Jalil

火山引擎 最新活动