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

MedGemma-1.5-4B实战教程:医学影像多模态理解从模型调用到Web集成

MedGemma-1.5-4B实战教程:医学影像多模态理解从模型调用到Web集成 1. 为什么你需要一个医学影像“看图说话”工具? 你有没有遇到过这样的情况:手头有一张CT扫描图,想快速了解它大致显示了什么结构,但又不是放射科医生;或者在带学生做AI医疗实验时,需要一个能即时响应影像提问的演示系统,而不是等半天跑完一整套预处理+模型推理流程;又或者,你刚跑通了一个多模态模型,却卡在“怎么让别人一眼看懂它到底能干啥”这一步。 MedGemma-1.5-4B 就是为这类真实需求而生的——它不是泛泛而谈的“多模态大模型”,而是 Google 针对医学影像专门优化过的 40 亿参数多模态模型。它不生成假报告,也不编造诊断结论,但它能准确识别肺部纹理、脊柱节段、脑室轮廓,能理解“这张MRI里左侧海马区信号是否增高”这样的专业问题,并用清晰、克制、符合医学表达习惯的语言给出回应。 本文不讲论文里的指标曲线,也不堆砌训练细节。我们直接带你从零开始: 下载并本地加载 MedGemma-1.5-4B 模型 写三行代码完成一张X光片+中文问题的联合推理

下载海康视频插件后,浏览器显示此站点正在尝试打开webcontrol浏览器中间件

已下载并安装海康的【VideoWebPlugin.exe】视频插件后,页面显示弹窗【要打开webcontrol浏览器中间件吗?xxxx://xxxxxx 想打开此应用】且页面仍然没有监控视频 解决步骤: 1、选中弹窗中的【xxxx://xxxxxx】这个地址并复制; 2、打开谷歌浏览器在地址栏输入【chrome://flags】,若是edge浏览器会自动跳转到【edge://flags】,其他浏览器同理; 3、在搜索框中输入【Insecure origins treated as secure】; 4、在输入框粘贴刚复制的【xxxx://xxxxxx】地址,并将【已停用】改为【已启用】,后点击右下角【重新启动】按钮重启浏览器; 5、重启后刷新该页面会在地址栏下方显示弹窗,点击【允许】按钮即可正常显示监控视频; *若点击的是【屏蔽】

MC.JS WEBMC1.8 vs 传统开发:效率提升300%的秘诀

快速体验 1. 打开 InsCode(快马)平台 https://www.inscode.net 2. 输入框内输入如下内容: 创建一个对比演示项目,分别用纯JavaScript和MC.JS WEBMC1.8实现相同的简单沙盒游戏功能。游戏需要包含:1) 角色移动控制 2) 方块放置与破坏 3) 简单物品栏系统。使用AI自动生成两个版本的代码,并统计开发时间、代码行数、性能指标等数据,生成可视化对比报告。两个版本都应支持实时预览,方便直观比较。 1. 点击'项目生成'按钮,等待项目生成完整后预览效果 最近在开发一个简单的沙盒游戏demo时,我尝试了两种不同的开发方式:传统JavaScript和MC.JS WEBMC1.8框架。结果让我大吃一惊,后者竟然帮我节省了70%的开发时间!今天就来分享一下这个对比实验的过程和发现。 1. 项目需求分析

自研前端MVVM框架Lire|从零造框架到一键脚手架,新手也能轻松上手

自研前端MVVM框架Lire|从零造框架到一键脚手架,新手也能轻松上手 文章目录 * 自研前端MVVM框架Lire|从零造框架到一键脚手架,新手也能轻松上手 * 一、为什么要自研Lire框架? * 二、Lire框架核心特性(现阶段) * 1. 响应式数据绑定 * 2. 模板编译能力 * 3. 事件绑定 * 4. 零外部依赖 * 5. 配套脚手架支持 * 三、如何快速使用Lire框架?(新手友好) * 方式1:通过脚手架一键创建项目(推荐) * 方式2:本地安装,手动引入(适合学习和自定义配置) * 四、开发历程回顾(踩坑总结) * 五、Lire框架后续迭代计划 * 六、适合谁使用/学习Lire? * 七、最后想说的话 * 相关地址 大家好~ 今天给大家分享一个我从零开发的前端轻量MVVM框架——Lire,从核心逻辑编写、npm包发布,到配套脚手架开发,完整实现“