You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Octopi树莓派控制LED时sudo运行脚本出现ModuleNotFoundError: No module named 'board'问题求助

问题根源与解决方案

首先,咱们来拆解你遇到的两个核心问题:

1. 为什么sudo运行脚本时找不到board模块?

你在普通用户的虚拟环境(venv)里安装了board等依赖,但sudo默认会使用root用户的全局Python环境,而不是你当前激活的那个venv。虚拟环境是用户隔离的——root的环境里根本没装这些模块,所以自然会报ModuleNotFoundError

2. 解决办法(按推荐程度排序)

方法一:用虚拟环境的Python路径直接运行(最推荐)

不用激活venv,直接指定venv里的Python解释器路径给sudo,这样既用了有依赖的环境,又获得了权限:

sudo ./venv/bin/python leds/led_controller.py

(如果你的venv不在当前目录,把路径换成实际的即可,比如/home/pi/my_venv/bin/python

方法二:让普通用户拥有GPIO访问权限,不用sudo

这个方法更优雅,避免每次都用sudo。报错Can't open /dev/mem: Permission denied是因为普通用户没有访问GPIO设备的权限,把你的用户加入gpio组就行:

sudo usermod -aG gpio $USER

执行完后,注销再重新登录(或者重启树莓派),之后直接用虚拟环境的Python运行脚本就可以了:

./venv/bin/python leds/led_controller.py

方法三:给root安装依赖(不推荐,仅应急)

这个方法会污染root的全局Python环境,尽量不用,但如果临时需要:

sudo pip install board adafruit-blinka

(假设你用的是Adafruit的board库,通常需要搭配adafruit-blinka才能在树莓派上正常工作)

额外小提示:关于GPIO 17的错误

你之前遇到“Gpio 17 is illegal”,大概率是因为你用的LED控制库(比如Adafruit Blinka)对引脚的命名规范有要求,或者该引脚被OctoPrint系统服务、其他程序占用了。换成GPIO 18能正常运行就没问题,如果之后想复用17,可以用gpio readall命令查看引脚的占用状态。

内容的提问来源于stack exchange,提问作者ffonz

火山引擎 最新活动