rosrun运行Python ROS节点时pyaudio报无PyAudio属性错误如何解决
问题原因
AttributeError: 'module' object has no attribute 'PyAudio'的核心原因是运行环境不匹配:你在virtualenv虚拟环境中安装了pyaudio,Pycharm运行时加载的是你配置的虚拟环境Python解释器,所以运行正常;但执行rosrun时,默认调用的是系统全局的Python解释器,该环境中要么没有安装pyaudio,要么安装的pyaudio版本存在异常。
解决方法
- 方法1:运行前先激活虚拟环境
进入你创建virtualenv的目录,执行以下命令激活环境后再运行rosrun即可:
source 你的虚拟环境路径/bin/activate rosrun mic_pkg mic_app.py
注意不要加sudo执行rosrun,sudo会重置环境变量,切回系统Python环境。
- 方法2:指定脚本的Python解释器路径
将代码第一行的#!/usr/bin/env python修改为你虚拟环境中Python解释器的绝对路径,示例如下(需替换为你自己的虚拟环境路径):
#!/home/xxx/venv/bin/python
修改完成后给脚本添加执行权限:
chmod +x mic_app.py
后续执行rosrun时会直接调用指定的虚拟环境解释器,无需手动激活环境。
- 方法3:全局环境安装pyaudio
如果不需要Python环境隔离,直接在系统全局Python环境安装pyaudio即可:
如果是ROS Noetic等使用Python3的版本,执行:
sudo apt install python3-pyaudio
如果是旧版本使用Python2的ROS,执行:
sudo apt install python-pyaudio
也可以通过pip全局安装:
sudo pip3 install pyaudio
额外注意
你提供的代码中set_device_index方法没有给self.device_index设置默认初始值,若检索不到名称带mic/input的音频设备,后续运行会触发属性不存在的报错,建议在__init__方法中添加一行self.device_index = 0设置默认值,提升代码稳定性。
内容的提问来源于stack exchange,提问作者Filip
相关产品推荐
相关产品推荐

