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

AI驱动UI自动化框架Maestro:从环境搭建到实战Demo

AI驱动UI自动化框架Maestro:从环境搭建到实战Demo

一、为什么选择Maestro(AI增强版)? 在接触具体操作前,我们先搞清楚:为什么Maestro能成为当前安卓UI自动化的优选框架?传统自动化工具(如Appium、Espresso)需要依赖固定的控件定位符(ID、XPath),一旦UI迭代,脚本就会大量失效,且需手动添加sleep()处理延迟,维护成本极高。 而Maestro的AI增强能力恰好精准解决了这些痛点,核心优势如下: * AI智能控件识别:无需依赖ID/XPath,可通过自然语言描述(如“点击搜索按钮”)定位控件,自动适配不同屏幕分辨率和机型,UI轻微变化也能稳定识别。 * 动态容错与自动等待:内置AI驱动的延迟管理机制,自动识别页面加载、网络请求、动画渲染等场景,彻底告别硬编码的sleep(),兼顾测试效率与稳定性。 * 极简语法与极速迭代:采用声明式YAML语法,20行配置即可完成复杂流程测试;脚本无需编译,修改后实时生效,迭代效率提升数倍。 * 跨平台与全场景兼容:一套脚本可覆盖安卓、iOS双平台,完美适配原生应用、React Native、Flutter、WebView等多种开发架构。 * 轻量化部

论文和文章提示词去AI痕迹:手把手教你把AI写的文章改成“人味儿”,从学生党到博主都能用的去AI痕迹攻略

论文和文章提示词去AI痕迹:手把手教你把AI写的文章改成“人味儿”,从学生党到博主都能用的去AI痕迹攻略

论文和文章提示词去AI痕迹:手把手教你把AI写的文章改成“人味儿”,从学生党到博主都能用的去AI痕迹攻略 本文围绕降低文章 AI 占比展开,针对学生论文、博主文案、公众号内容等场景,分享了去 AI 化实用方法:用口语化表达、替换 AI 专用词、加入个人经历,同时推荐小发猫伪原创等辅助工具。还提供了多场景可直接套用的提示词模板,帮助用户让 AI 生成内容更贴合个人风格。整体以第一人称、生活化语气呈现,结构自然,避免生硬逻辑和专业术语,助力不同需求的用户写出有 “人味儿” 的原创内容。 人工智能专栏介绍     人工智能学习合集专栏是 AI 学习者的实用工具。它像一个全面的 AI 知识库,把提示词设计、AI 创作、智能绘图等多个细分领域的知识整合起来。无论你是刚接触 AI 的新手,还是有一定基础想提升的人,都能在这里找到合适的内容。从最基础的工具操作方法,到背后深层的技术原理,专栏都有讲解,还搭配了实例教程和实战案例。

别等这波 AI 算力浪潮过去才后悔:CANN 应该学什么?

别等这波 AI 算力浪潮过去才后悔:CANN 应该学什么?

别等这波 AI 算力浪潮过去才后悔:CANN 应该学什么? 昇腾 CANN 这几年是真在 “狂飙”,生态越做越大、功能越来越多、文档越写越厚…… 但问题也随之出现: CANN 支持 Python、C++、AscendCL、TBE、MindSpore、PyTorch Frontend、Kernel DSL……这么多"语言",到底学哪个?从哪入门? 别急,今天就给你一次性讲透,看完不再迷茫。 CANN 语言体系到底有多复杂? 整个 CANN 软件栈由多层 API 和 Kernel 构成,所以才会出现一堆「看似不同,实则分工明确」的语言接口 为了简化理解,我们可以把它粗暴分成三层: * 高层:框架调用

大语言模型LLM解决AI幻觉方法的深度分析

大语言模型LLM解决AI幻觉方法的深度分析

LLM解决AI幻觉方法的深度分析 引言:AI幻觉的定义与研究背景 AI 幻觉作为大型语言模型(LLM)部署的核心挑战,其学术价值体现于对模型"概率生成天性"的机制探索(如 OpenAI 2025 年论文《Why Language Models Hallucinate》揭示的底层逻辑),产业意义则关乎医疗、金融等关键领域的安全应用[1]。当前研究显示,即使开发团队对 LLM 内部运作的理解仍局限于 10%~20%(Anthropic 团队研究),但该现象已引发信息污染、信任危机等风险,同时在科学发现等领域展现创造力价值,成为 AI 可靠性研究的焦点[2][3][4]。 AI 幻觉的权威分类: * 事实性幻觉:生成内容与客观事实冲突,例如错误声称"蜂蜜可帮助糖尿病患者稳定血糖"[2]