树莓派3B+开机自启Python脚本提示face_recognition模块未导入如何解决
问题根因
- 初始导入
face_recognition失败:你是在pi用户下通过pip安装的该库,默认仅对pi用户的Python环境生效,systemd服务不加User参数时默认以root身份运行,root环境下没有安装对应依赖,因此导入报错。 - 加
User=pi后每10秒重启:你配置了Restart=always规则,只要Python脚本运行结束(无论正常退出还是异常报错退出),systemd都会按照你设置的RestartSec=10s间隔自动重启服务,属于配置规则导致的预期外行为。
修复方案
1. 修正systemd服务配置
将你的service文件替换为如下内容,注意对应修改你自己的Python版本路径:
[Unit] Description=Start Bling # 不需要桌面环境的话可以配置为等待多用户模式启动完成,不需要等图形界面加载 After=multi-user.target [Service] User=pi Group=pi WorkingDirectory=/home/pi/facial_recognition # 注意树莓派默认/usr/bin/python指向Python2,如果你是用Python3安装的依赖,这里要改为/usr/bin/python3 ExecStart=/usr/bin/python3 /home/pi/facial_recognition/run_on_start.py # 仅在脚本异常退出时重启,正常运行结束不需要重启,如果你是单次运行的脚本可以直接设置为Restart=no Restart=on-failure RestartSec=10s KillMode=process TimeoutSec=infinity # 补充用户Python库路径,避免找不到pip安装的依赖,路径可以通过pi用户执行`python3 -c "import site; print(site.getusersitepackages())"`获取后替换 Environment=PYTHONPATH=/home/pi/.local/lib/python3.9/site-packages [Install] # 不需要桌面环境就用multi-user.target,开机到控制台即可启动,需要桌面自启就改回graphical.target WantedBy=multi-user.target
2. 验证依赖与运行逻辑
- 先以pi用户身份手动执行完整的启动命令,比如
/usr/bin/python3 /home/pi/facial_recognition/run_on_start.py,确认脚本可以正常运行没有报错 - 执行
python3 -c "import face_recognition; print('load success'),确认依赖可以正常导入
3. 排查异常重启问题
如果调整配置后仍然出现重启,执行sudo journalctl -u 你的服务文件名.service -f查看服务运行日志,定位脚本的报错原因,常见问题包括:摄像头权限不足、脚本内用了相对路径找不到对应文件、常驻循环逻辑异常退出。
4. 生效配置
修改完service文件后依次执行以下命令生效:
sudo systemctl daemon-reload重载systemd配置sudo systemctl enable 你的服务文件名.service开启开机自启sudo systemctl start 你的服务文件名.service手动启动测试运行状态
内容的提问来源于stack exchange,提问作者Luc
相关产品推荐
相关产品推荐

