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

再说该问题产生的原因,下面是大D老师的回答,自行参考。

太棒了!你找到了正确的解决方案。让我详细解释为什么会出现这个问题,以及为什么 --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/exceptdefget_install_requires():"""延迟解析 requirements.txt,避免构建时依赖""" requirements =[]if sys.platform.startswith("linux")and platform.machine()=="x86_64": requirements.append("triton>=2.0.0,<3")# 只在需要时导入 pkg_resourcestry:import pkg_resources req_file = os.path.join(os.path.dirname(__file__),"requirements.txt")withopen(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")withopen(req_file, encoding="utf-8")as f: requirements.extend([ line.strip()for line in f if line.strip()andnot line.startswith("#")])return requirements defread_version(fname="whisper/version.py"):exec(compile(open(fname, encoding="utf-8").read(), fname,"exec"))returnlocals()["__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。

Read more

Claude Code 本地化终极指南:手把手教你接入魔搭,实现真正的 AI 编程自由!

前言 AI 编程的浪潮正以前所未有的速度改变着我们的开发方式。从 GitHub Copilot 到 Cursor,我们见证了 AI 如何成为提升效率的利器。而 Anthropic 推出的 Claude Code,更是以其独特的“AI Agent”形态,让我们看到了人机协作的全新可能。 它不仅仅是一个聊天机器人,更是一个能直接在你的终端里阅读、修改、执行代码的智能伙伴。然而,官方版本需要绑定海外的 API 服务,对于国内用户而言,这不仅意味着网络访问的障碍,也伴随着持续的成本。 那么,有没有一种方法,既能享受 Claude Code 强大的交互能力,又能免费、稳定地使用我们触手可及的国产大模型呢? 答案是:有! 本教程将作为一份详尽的指南,手把手带你完成从安装 Claude Code 到配置魔搭社区 API 的全过程,让你零门槛、

AI赋能原则10解读思考:当人人都能从 AI 获益,人类整体将跨入新的生产力时代

AI赋能原则10解读思考:当人人都能从 AI 获益,人类整体将跨入新的生产力时代

目录 一、为什么必须进入“政府 2.0”?——治理的时空尺度被 AI 改写了 二、AI 的真正价值不是“替代人”,而是“扩大每个人的能力边界” 三、不是监管技术,而是设计“公共智能系统” (一)让每个人都能“用得起”“用得好” AI:建设国家级 AI 基础设施 1. 提供普惠可及的 AI 公共服务 2. 推动教育体系全面融入 AI 素养 3. 为中小企业构建可用、可负担的 AI 平台 (二)建立透明、公平、可信的数据治理体系:让技术发展与社会价值对齐 1. 统一而清晰的数据访问标准 2. 更成熟的隐私保护机制 3.

一文读懂爆火的 OpenClaw:从架构原理到实战生态,AI Agent 终于能“真干活”了

一文读懂爆火的 OpenClaw:从架构原理到实战生态,AI Agent 终于能“真干活”了

目录 * * 🔥 前言:AI Agent 的“iPhone 时刻”来了? * 一、OpenClaw 到底是什么? * 1.1 官方定义 * 1.2 名字的前世今生 * 1.3 降维打击:与传统 Agent 的核心区别 * 二、爆火底层逻辑:为什么开发者集体“真香”? * ✅ 1. 终结“失控”噩梦 * ✅ 2. 本地优先的极致隐私 * ✅ 3. 聊天即控制的极简体验 * ✅ 4. 标准化生态降低门槛 * 三、核心架构深度解析:四层模型揭秘 * 3.1 Gateway 网关层:总调度 + 安全屏障 * 3.2 Agent 智能体: