跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI算法

CosyVoice 安装 openai-whisper 报错 ModuleNotFoundError: No module named pkg_resources 解决方法

综述由AI生成CosyVoice 安装 openai-whisper 时若出现 ModuleNotFoundError: No module named pkg_resources 错误,通常由 pip 构建隔离机制导致。在临时构建环境中未安装 setuptools,而 setup.py 在模块级别导入了 pkg_resources 引发失败。可通过添加 --no-build-isolation 参数跳过隔离环境直接利用当前虚拟环境中的依赖解决。长期建议修改 setup.py 延迟导入逻辑或提交 PR 修复项目配置,避免对预置环境的强依赖。

怪力乱神发布于 2026/3/27更新于 2026/5/310 浏览

CosyVoice 安装 openai-whisper 报错 ModuleNotFoundError: No module named pkg_resources 解决方法

解决方案

推荐使用源码安装,并在安装时禁用构建隔离:

git clone https://github.com/openai/whisper.git
cd whisper
git checkout v20231117
pip install -e . --no-build-isolation

技术原理解析

问题根源分析

问题的关键在于 PEP 517/518 构建隔离机制和你的 setup.py 实现方式。

1. 构建隔离机制 (Build Isolation) 的工作原理

当你执行 pip install -e .(不带 --no-build-isolation)时,pip 会:

1. 创建一个临时的、干净的虚拟环境(在 /tmp/pip-build-env-xxx/)
2. 在这个隔离环境中只安装 pyproject.toml 中 [build-system] 要求的包
3. 在隔离环境中执行构建(运行 setup.py)
4. 将构建产物安装到你的目标环境
2. 为什么你的构建会失败

看你的 setup.py 第 5 行:

import pkg_resources # 这行在构建的早期阶段就需要

问题出在第 30 行附近:

install_requires=requirements +[str(r)for r in pkg_resources.parse_requirements(open(os.path.join(os.path.dirname(__file__),"requirements.txt")))]

关键问题:pkg_resources.parse_requirements() 在模块导入级别就被执行了!

这意味着:

  • Python 在解析 setup.py 时,立即执行了 import pkg_resources
  • 但在隔离的构建环境中,默认没有安装 setuptools
  • 因此 pkg_resources 不存在,导致 ModuleNotFoundError
3. 构建环境 vs 目标环境的区别
┌─────────────────────┐ ┌─────────────────────┐
│ 目标虚拟环境         │ │ 隔离构建环境         │
│ (cosyvoice)         │ │ (临时)               │
├─────────────────────┤ ├─────────────────────┤
│ ✓ setuptools 81.0.0 │ │ ✗ setuptools 未安装 │
│ ✓ pkg_resources     │ │ ✗ pkg_resources     │
│ ✓ 所有项目依赖      │ │ 只有构建基础包       │
└─────────────────────┘ └─────────────────────┘
↑ ↑
└────── pip install -e . ──────┘
需要同时满足两者

为什么 --no-build-isolation 能解决

pip install -e . --no-build-isolation

这个命令告诉 pip:不要创建隔离的构建环境,直接在当前激活的虚拟环境中构建

于是流程变成:

┌─────────────────────┐
│ 目标虚拟环境         │
│ (cosyvoice)         │
├─────────────────────┤
│ ✓ setuptools 81.0.0 │ ←── 直接在同一个环境中执行构建
│ ✓ pkg_resources     │    和安装
│ ✓ 所有项目依赖      │
└─────────────────────┘
↓
pip install -e . (无隔离环境)

因为你的虚拟环境中已经有 setuptools,所以 import pkg_resources 可以成功执行。

更好的修复方式

虽然 --no-build-isolation 解决了问题,但更好的做法是修改 setup.py,使其在隔离环境中也能工作:

import os
import platform
import sys
from setuptools import find_packages, setup

# 延迟导入 pkg_resources,或使用 try/except
def get_install_requires():
    """延迟解析 requirements.txt,避免构建时依赖"""
    requirements = []
    if sys.platform.startswith("linux") and platform.machine() == "x86_64":
        requirements.append("triton>=2.0.0,<3")
    
    # 只在需要时导入 pkg_resources
    try:
        import pkg_resources
        req_file = os.path.join(os.path.dirname(__file__), "requirements.txt")
        with open(req_file, encoding="utf-8") as f:
            requirements.extend([str(r) for r in pkg_resources.parse_requirements(f)])
    except ImportError:
        # 降级方案:简单读取 requirements.txt
        req_file = os.path.join(os.path.dirname(__file__), "requirements.txt")
        with open(req_file, encoding="utf-8") as f:
            requirements.extend([
                line.strip()
                for line in f
                if line.strip() and not line.startswith("#")
            ])
    return requirements

def read_version(fname="whisper/version.py"):
    exec(compile(open(fname, encoding="utf-8").read(), fname, "exec"))
    return locals()["__version__"]

setup(
    name="openai-whisper",
    py_modules=["whisper"],
    version=read_version(),
    description="Robust Speech Recognition via Large-Scale Weak Supervision",
    long_description=open("README.md", encoding="utf-8").read(),
    long_description_content_type="text/markdown",
    readme="README.md",
    python_requires=">=3.8",
    author="OpenAI",
    url="https://github.com/openai/whisper",
    license="MIT",
    packages=find_packages(exclude=["tests*"]),
    install_requires=get_install_requires(),  # 使用函数延迟解析
    entry_points={"console_scripts": ["whisper=whisper.transcribe:cli"]},
    include_package_data=True,
    extras_require={"dev": ["pytest", "scipy", "black", "flake8", "isort"]},
)

总结

问题原因解决方案
ModuleNotFoundError: No module named 'pkg_resources'构建隔离环境中没有 setuptools,但 setup.py 在模块级别导入 pkg_resources1. ✅ --no-build-isolation 跳过隔离环境
2. 修改 setup.py 延迟导入 pkg_resources

你使用的 --no-build-isolation 是完全正确的临时解决方案。对于长期使用,可以考虑向项目提交 PR 修改 setup.py,使其构建时不需要预先存在的 setuptools。

目录

  1. CosyVoice 安装 openai-whisper 报错 ModuleNotFoundError: No module named pkg_resources 解决方法
  2. 解决方案
  3. 技术原理解析
  4. 问题根源分析
  5. 1. 构建隔离机制 (Build Isolation) 的工作原理
  6. 2. 为什么你的构建会失败
  7. 3. 构建环境 vs 目标环境的区别
  8. 为什么 --no-build-isolation 能解决
  9. 更好的修复方式
  10. 延迟导入 pkg_resources,或使用 try/except
  11. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Web 开发者基于 Dify 构建 AI Agent 低代码 HR 招聘系统
  • 算法基础:滑动窗口技巧与经典例题解析
  • 基于自然语言的 SQL 查询生成与优化实践
  • ChatGPT 如何利用结构化原则实现高效信息管理
  • 基于 Higress 网关将 REST API 转换为 MCP Server
  • 大模型思维链(CoT):原理、实践与优势分析
  • 智元机器人开源具身仿真框架 Genie Sim 入门教程
  • Scapy 详细安装教程、功能介绍与快速上手
  • Java 对象更新时避免空字段覆盖的几种拷贝方案
  • Git 安装配置及基础使用步骤
  • AI 时代如何培养前瞻性思维以应对职业变革
  • WinBtrfs 在 Windows 下读写 Linux Btrfs 分区指南
  • Tauri 架构解析:从 WebView 到工具链与生态
  • OpenCode + GitHub Copilot:Claude Code 开源平替与高性价比方案
  • Gazebo 机器人三维物理仿真平台
  • 企业微信群机器人添加点击链接教程:图文与 Markdown 方式
  • Go 语言开发规范与最佳实践指南
  • 算法刷题记录:数学类题目解析
  • Python爬虫入门:阶段学习路线与技术要点
  • 量子计算驱动 Python 医疗诊断:变分量子分类器实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online