You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Jenkins任务中使用Coqui-ai TTS遇FileNotFoundError问题求助

解决Jenkins中运行Coqui-AI TTS脚本的FileNotFoundError问题

错误详情

在Jenkins任务中执行TTS脚本时出现以下错误:

C:\ProgramData\Jenkins\.jenkins\workspace\Dziennik\scripts>python tts.py --input_text_file_path DU/2025/658 
Traceback (most recent call last):
  File "C:\ProgramData\Jenkins\.jenkins\workspace\Dziennik\scripts\tts.py", line 34, in <module>
    api = TTS(model_name="tts_models/pl/mai_female/vits")
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ja\AppData\Local\Programs\Python\Python311\Lib\site-packages\TTS\api.py", line 64, in __init__
    self.manager = ModelManager(models_file=self.get_models_file_path(), progress_bar=progress_bar, verbose=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ja\AppData\Local\Programs\Python\Python311\Lib\site-packages\TTS\utils\manage.py", line 51, in __init__
    self.output_prefix = get_user_data_dir("tts")
                         ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ja\AppData\Local\Programs\Python\Python311\Lib\site-packages\TTS\utils\generic_utils.py", line 139, in get_user_data_dir
    key = winreg.OpenKey(
          ^^^^^^^^^^^^^^^
FileNotFoundError: [WinError 2] Nie mo�na odnale�� okre�lonego pliku

问题原因

脚本在本地CMD正常运行,但Jenkins中失败,核心原因是Jenkins运行的系统账户与本地用户权限/环境不一致:
Coqui TTS的get_user_data_dir函数会通过Windows注册表读取当前用户的AppData目录,而Jenkins默认使用Local System账户运行,该账户没有常规用户的注册表项和用户目录访问权限,导致无法找到对应文件。

解决方案

1. 修改Jenkins服务的运行账户

将Jenkins服务的运行账户改为你本地运行脚本的用户(比如Ja):

  • 打开Windows服务管理器,找到Jenkins服务
  • 右键选择「属性」,切换到「登录」选项卡
  • 选择「此账户」,输入你的用户名和密码,点击「应用」
  • 重启Jenkins服务,重新执行任务

2. 手动指定TTS数据目录

通过环境变量或代码强制指定Coqui TTS的存储目录,避免读取注册表:

方法A:在Jenkins任务中设置环境变量

  • 进入Jenkins任务的「配置」页面,找到「构建环境」
  • 勾选「设置环境变量」,添加变量TTS_HOME,值设为Jenkins有权限读写的路径(比如C:\ProgramData\Jenkins\.jenkins\tts_data)
  • 保存配置后重新执行任务

方法B:在脚本中直接设置环境变量

在初始化TTS对象之前添加以下代码:

import os
# 替换为实际可读写的路径
os.environ['TTS_HOME'] = 'C:\ProgramData\Jenkins\.jenkins\tts_data'

3. 检查Jenkins工作空间权限

确保Jenkins工作空间目录(C:\ProgramData\Jenkins\.jenkins\workspace\Dziennik)对运行Jenkins的用户有读写权限:

  • 右键工作空间目录,选择「属性」-「安全」
  • 添加Jenkins运行账户,勾选「读取」「写入」等必要权限
  • 点击「应用」保存设置

关联脚本

用户使用的TTS脚本:

from TTS.api import TTS
import torch
import io
import argparse

# arg parser
parser = argparse.ArgumentParser()
parser.add_argument('--input_text_file_path', dest='input_text_file_path',
                    type=str, help='Add input_text_file_path')
args = parser.parse_args()

# Save the original torch.load function
_original_torch_load = torch.load

# Define a new function that forces weights_only=False

def custom_torch_load(*args, **kwargs):
    if "weights_only" not in kwargs:
        kwargs["weights_only"] = False
    return _original_torch_load(*args, **kwargs)


# Override torch.load globally
torch.load = custom_torch_load


def import_text_file(file_name):
    with io.open(f"{file_name}.txt", 'r', encoding="utf-8") as file:
        return file.read().replace('\n', '')


# TTS with on the fly voice conversion
api = TTS(model_name="tts_models/pl/mai_female/vits")
api.tts_to_file(
    text=import_text_file(args.input_text_file_path.replace('/', '_')),
    speaker_wav="target/speaker.wav",
    file_path=f"{args.input_text_file_path.replace('/', '_')}.wav"
)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:12:36