Windows系统下修复pytube模块KeyError: 'url_encoded_fmt_stream_map'问题
解决Windows上pytube的KeyError: 'url_encoded_fmt_stream_map'问题
这个错误本质是YouTube更新了页面数据结构,旧版本的pytube还在沿用过时的字段名解析流数据,下面是几种在Windows上可行的修复方案:
方案1:升级到pytube最新修复版本
这是最直接的解决方法,官方社区已经针对这个问题做了修复,只是PyPI上的版本可能存在滞后。操作步骤如下:
- 打开命令提示符(CMD)或PowerShell(右键选择“以管理员身份运行”避免权限问题)
- 先尝试升级官方版本:
pip install --upgrade pytube - 如果升级后问题依旧,强制重新安装或者安装GitHub上的最新源码版本:
pip install pytube --force-reinstall # 或者直接安装GitHub最新版 pip install git+https://github.com/pytube/pytube.git
方案2:手动修改pytube源代码(适合不想升级的情况)
如果升级后还是有问题,或者你需要保留特定版本,可以手动修改pytube的解析逻辑:
- 找到pytube的安装目录:默认路径一般是
C:\Users\[你的用户名]\AppData\Local\Programs\Python\Python[版本号]\Lib\site-packages\pytube(把[你的用户名]和[版本号]换成实际内容) - 打开目录下的
extract.py文件,找到get_ytplayer_config函数 - 替换原来获取
url_encoded_fmt_stream_map的代码,改为从player_response中解析流数据:
原来的代码可能类似:
替换成:stream_map = ytplayer_config['url_encoded_fmt_stream_map']import json player_response = json.loads(ytplayer_config['player_response']) stream_data = player_response['streamingData'] # 后续可以从stream_data的['formats']和['adaptiveFormats']中获取流信息 - 保存文件后重启Python环境,再测试你的代码。
方案3:切换到更稳定的替代工具yt-dlp
如果pytube的问题反复出现,推荐使用yt-dlp——这是一个维护更活跃的YouTube下载工具,对页面结构的更新适配更快:
- 安装yt-dlp:
pip install yt-dlp - 简单的Python调用示例:
import yt_dlp video_url = "你的YouTube视频URL" # 可以自定义下载参数,比如指定画质、格式等 ydl_options = { 'format': 'bestvideo+bestaudio/best' } with yt_dlp.YoutubeDL(ydl_options) as ydl: ydl.download([video_url])
内容的提问来源于stack exchange,提问作者Dr_Claymore
相关产品推荐
相关产品推荐

