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

灵感画廊:5分钟快速上手Stable Diffusion艺术创作

灵感画廊:5分钟快速上手Stable Diffusion艺术创作 你是否曾有过这样的瞬间:脑海中闪过一个绝妙的画面,却苦于无法用画笔或软件将其呈现?或者,面对复杂的AI绘画工具,被一堆看不懂的参数和按钮劝退?今天,我将带你体验一款与众不同的AI艺术创作工具——灵感画廊。它没有冰冷的工业界面,只有如艺术沙龙般的恬静空间,让你在5分钟内,将脑海中的“梦境碎片”凝结成永恒的视觉诗篇。 1. 什么是灵感画廊? 灵感画廊不是一个普通的Stable Diffusion WebUI。它是一款基于 Stable Diffusion XL 1.0 模型深度定制的沉浸式艺术创作终端。它的设计哲学很特别:让创作过程本身成为一种审美享受。 想象一下,你走进一间充满宣纸色调、衬线字体和极简留白的数字画室。这里没有令人眼花缭乱的滑块和选项卡,只有“梦境描述”、“尘杂规避”和“挥笔成画”这样充满诗意的交互。它的目标,就是为你提供一个可以专注捕捉灵感的静谧空间。 对于新手来说,它的最大价值在于 “开箱即用” 和 “直观友好”。你不需要理解“

一文说清ESP32 Arduino在智能家居中的核心应用要点

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。整体遵循“去AI感、强工程味、重实操性、有教学节奏”的原则,彻底摒弃模板化表达、空洞术语堆砌和机械式章节划分,代之以 真实开发者口吻、层层递进的逻辑流、穿插经验判断的细节注解 ,并强化了 可复用代码的上下文解释、参数选择背后的权衡思考、以及量产级避坑指南 。 一个温控器工程师的ESP32实战手记:Wi-Fi不断连、任务不卡死、升级不翻车 去年冬天,我调试一款嵌入式温控器时,在客户现场连续遭遇三连击: - 凌晨三点,Wi-Fi突然掉线,加热膜持续满功率运行——幸好用户手动关了总闸; - 升级固件后设备黑屏,拆开发现 otadata 分区写了一半就断电,BootROM找不到有效镜像; - PIR人体检测响应延迟高达1.8秒,APP里显示“已离家”,人其实刚走到玄关。 这不是芯片不行,是配置没吃透。 ESP32 Arduino不是“会点C语言就能跑起来”的玩具平台,而是一套 需要你亲手拧紧每一颗螺丝的工业级开发范式

ROS 2从入门到精通系列(十六):自主导航机器人 - 系统架构与SLAM

ROS 2从入门到精通系列(十六):自主导航机器人 - 系统架构与SLAM 构建完整的自主导航系统,从建图到导航的端到端实现。 引言 自主导航是机器人最经典的应用之一。它涉及: * 感知:LIDAR扫描、里程计 * 建图:SLAM建立环境地图 * 规划:生成无碰撞路径 * 控制:执行运动命令 本篇将从0到1构建一个完整的导航系统。 一、自主导航系统架构 1.1 完整的系统架构 硬件层 控制模块 运动控制 PID Control 安全监督 Emergency Stop 规划模块 全局规划 Dijkstra/A* 局部规划 DWA/TEB 可行性检查 Feasibility Check 感知模块 扫描匹配 Scan Matching 里程计 Odometry

智元 D1 强化学习sim-to-real系列 | Robot Lab 基于 Isaac Lab 的机器人强化学习使用(四)

智元 D1 强化学习sim-to-real系列 | Robot Lab 基于 Isaac Lab 的机器人强化学习使用(四)

1. 项目简介 Robot Lab 是一个基于 NVIDIA Isaac Lab 构建的机器人强化学习扩展库,专注于为各类机器人提供标准化的强化学习训练环境。该项目允许开发者在独立的环境中进行开发,而无需修改核心 Isaac Lab 仓库。对应ISaac lab 使用需要你参考并学习。然后可以参考Isaac Sim|操作界面指南,ISAAC SIM安装与软件实践学习(二)—用户界面与工作流程,Nvidia Isaac Sim图形界面 入门教程 2024(3)学习操作。最全的资料还是我们之前讲到的isaacsim官方教程以及isaaclab翻译版本 NVIDIA的机器人平台主要由两大核心组件构成,它们之间是层级关系:基础仿真平台Isaac Sim,以及构建于其上的机器人学习应用框架Isaac Lab。要精通 Isaac Sim,必须理解其分层架构中的五个核心概念。Isaac Sim 是什么? 它是一个通用的机器人模拟器,提供了高保真的物理引擎(PhysX)和照片级的渲染技术(