树莓派Zero W上Python VLC模块调用MediaPlayer报错求助
解决树莓派Zero W上Python音频播放器的vlc和youtube_dl兼容问题
嘿,刚接触Python就遇到跨环境的兼容性问题确实挺闹心的,我来帮你一步步梳理解决:
先搞定AttributeError: module 'vlc' has no attribute 'MediaPlayer'
这个错误不是你没装python-vlc,而是树莓派上的python-vlc绑定依赖的系统级VLC库不完整,或者pip安装的python-vlc版本和Python3.5不兼容,按下面步骤来:
- 安装系统级VLC开发库
树莓派的Raspbian Stretch默认可能没装全VLC的底层依赖,先通过apt补全:
sudo apt-get update && sudo apt-get install vlc libvlc-dev -y
这一步是让Python的vlc模块能找到底层的libvlc核心库。
- 重新安装兼容Python3.5的python-vlc版本
新版本的python-vlc已经不再支持Python3.5了,得指定旧版本安装:
pip3 install python-vlc==3.0.11115
这个版本是最后一批支持Python3.5的python-vlc稳定版本。
- 验证修复效果
打开Python3交互终端,输入:
import vlc print(vlc.MediaPlayer)
如果输出<class 'vlc.MediaPlayer'>而不是报错,说明vlc模块的问题解决了。
再处理youtube_dl的导入报错
同样因为Python3.5已经停止维护,新版本youtube_dl不再支持它,得装兼容的旧版本:
- 安装支持Python3.5的youtube_dl版本
pip3 install youtube_dl==2021.12.17
这是youtube_dl最后支持Python3.5的稳定版本。
- 确保pafy和youtube_dl版本匹配
重新安装对应版本的pafy,避免版本冲突:
pip3 install pafy==0.5.5
这个版本的pafy和上面的youtube_dl完全兼容。
最后优化你的脚本
原来的while True: pass会把树莓派Zero W的CPU占满,改成检查播放状态的循环更友好:
#!/usr/bin/env python import re import sys import time import pafy import vlc url = "https://www.youtube.com/watch?v=G0OqIkgZqlA" video = pafy.new(url) best = video.getbestaudio() playurl = best.url player = vlc.MediaPlayer(playurl) player.play() # 循环检查播放状态,避免占用100%CPU while player.is_playing(): time.sleep(1)
为啥Manjaro上能正常运行?
你的工作电脑用的Python3.7还在支持周期内,对应的python-vlc、pafy、youtube_dl版本都是最新兼容的,而且Manjaro默认的VLC库也很完整,所以没遇到这些兼容性问题。
内容的提问来源于stack exchange,提问作者lucian
相关产品推荐
相关产品推荐

