使用sudo运行Python串口程序时import wx模块失败的问题咨询
问题
我有一个application.py程序,需要对/dev/ttyUSB0进行读写操作,因此必须以sudo权限运行才能获取串口访问权限。该程序同时依赖wxPython库,代码顶部使用了import wx语句。
当不使用sudo直接从命令行启动程序时,程序可正常启动并运行(仅存在串口权限不足的问题);但使用sudo启动时,会触发如下错误:
File "application.py", line 35, in
import wx
ModuleNotFoundError: No module named 'wx'
请问是否需要配置相关环境?为何在sudo权限下程序无法找到wx模块?
原因分析
sudo运行程序时会切换到root用户的执行环境,而你安装的wxPython是存放在普通用户的Python环境中,root用户的Python环境并未安装该库。- 默认情况下,
sudo不会继承普通用户的环境变量(比如PYTHONPATH),导致root的Python解释器无法找到普通用户安装的第三方库。
解决办法
方案1:给root用户安装wxPython
直接用sudo执行安装命令,将wxPython安装到root的Python环境:
sudo pip install wxPython # 若使用Python3则替换为 sudo pip3 install wxPython
方案2:运行时继承普通用户环境变量
使用sudo -E参数让root继承当前用户的环境变量,从而找到普通用户安装的库:
sudo -E python application.py # 对应Python3版本 sudo -E python3 application.py
方案3:修改串口设备权限(推荐)
无需每次用sudo启动程序,直接给当前用户分配串口设备的访问权限:
- 将当前用户添加到
dialout组(Linux系统中串口设备通常归属该组):
sudo usermod -aG dialout $USER
- 注销当前用户并重新登录,权限生效后直接用普通用户启动程序:
python application.py
内容的提问来源于stack exchange,提问作者Walt
相关产品推荐
相关产品推荐

