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

智能摆放新方案:GOPLA框架在Stretch 3开源操作机器人上实现空间常识突破

智能摆放新方案:GOPLA框架在Stretch 3开源操作机器人上实现空间常识突破

你是否曾希望家里的机器人助手不仅能递水,还能在你做完饭后"顺手"把盘子放到碗架的正确位置?这看似简单的"顺手一放",对机器人而言却是一场巨大的智能挑战。 近日,慕尼黑工业大学与苏黎世联邦理工联合推出的GOPLA系统,在这一难题上取得了显著进展。这项前沿研究在Hello Robot Stretch 3移动操作机器人上完成验证,该具备"空间常识"的智能系统,在复杂摆放任务上的成功率比现有优秀方法高出约30%。 破解"摆放"难题:从语义理解到物理约束 机器人智能(具身智能)的重要目标之一是让机器能像人一样在物理世界中自主、合理地行动。而"物体放置"是检验其智能水平的关键环节。其核心挑战在于:如何让机器同时理解人类模糊的语义指令("放得顺手点")和精确的物理几何约束("不能碰到其他东西")? GOPLA的"

从零构建高可用系统:an end-to-end architecture 实战解析与避坑指南

快速体验 在开始今天关于 从零构建高可用系统:an end-to-end architecture 实战解析与避坑指南 的探讨之前,我想先分享一个最近让我觉得很有意思的全栈技术挑战。 我们常说 AI 是未来,但作为开发者,如何将大模型(LLM)真正落地为一个低延迟、可交互的实时系统,而不仅仅是调个 API? 这里有一个非常硬核的动手实验:基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。 从0到1构建生产级别应用,脱离Demo,点击打开 从0打造个人豆包实时通话AI动手实验 从零构建高可用系统:an end-to-end architecture 实战解析与避坑指南 背景痛点分析 在分布式系统开发中,我们常常面临以下典型问题: * 服务耦合严重:

5分钟快速上手:RoboTwin双臂机器人基准平台完整配置指南

5分钟快速上手:RoboTwin双臂机器人基准平台完整配置指南 【免费下载链接】RoboTwin[CVPR 25 (Highlight)] RoboTwin: Dual-Arm Robot Benchmark with Generative Digital Twins 项目地址: https://gitcode.com/gh_mirrors/ro/RoboTwin 想要快速搭建一个专业的双臂机器人数字孪生测试环境吗?🤖 RoboTwin作为CVPR 25 Highlight项目,提供了一个完整的机器人基准平台,让您能够轻松进行机器人算法测试和性能评估。本指南将带您完成从零开始的完整安装配置流程,让您在短短5分钟内就能开始使用这个强大的机器人测试工具。 🚀 RoboTwin项目核心功能介绍 RoboTwin是一个基于数字孪生技术的双臂机器人基准测试平台,主要面向机器人研究和算法开发人员。该项目通过生成机器人的数字副本,能够模拟真实世界中的操作场景,为各种机器人算法提供统一的评测标准。 主要技术特色: * 🔧 数字孪生技术:创建高精度机器人虚拟模型 * 🤖 双臂机

低代码可视化AR远程协助、巡检、装配、质检新平台-元境智搭平台

空间计算应用元境智搭平台是行业首款以AR技术为核心的端到端,一站式解决方案的零代码AR垂直应用搭建平台,用本平台搭建应用,企业只需要关注业务本身,可以低门槛、无须专业的AR/AI人才快速通过AR组件、AI组件、数字孪生组件等组件,像搭积木一样的搭建应用,同时也支持通过Open API与企业业务系统集成 支持多行业、多应用场景 AR智能平台支持的行业有:电力、能源、汽车、冶金、矿产、化工、高端制造、军工、航空航天、电子等行业支持的应用场景有:设备运维:设备的巡检、点检、维修、保养等;装配指导:2D和3D可视化装配指导;质量检测:AI自动识别质量问题,可视化辅助质检;售后维修:远程协作+知识库+作业指导,自主+他助;岗位培训:3D可视化实操培训,提升培训效率;供应链稽查:远程供应商质量稽查,和飞行检查效果一样;安全巡查:全程管控巡查过程,安全巡查落在实处。