You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派插入USB时运行带依赖Python脚本失败求助

解决方法

问题根源

udev触发脚本时的运行环境和终端用户(pi)的环境完全不同:默认以root身份运行,缺少用户级的环境变量(比如PYTHONPATH),导致无法找到通过pip3 install --user安装的第三方模块(如serial)。

具体修复方案

方案1:在shell脚本中指定Python环境变量

  1. 先在终端执行以下命令,获取你的serial模块安装路径:

    pip3 show pyserial | grep Location
    

    输出类似:Location: /home/pi/.local/lib/python3.9/site-packages

  2. 修改你的/home/pi/script.sh,添加环境变量后再调用Python脚本:

    #!/bin/bash
    # 替换成上一步拿到的路径
    export PYTHONPATH="/home/pi/.local/lib/python3.9/site-packages:$PYTHONPATH"
    # 调用Python脚本,用终端里的Python路径(可通过which python3获取)
    /usr/bin/python3 /home/pi/python_script.py
    

方案2:让udev以pi用户身份运行脚本

修改/etc/udev/rules.d/test.rules,用su pi切换到pi用户执行脚本,这样环境和终端完全一致:

SUBSYSTEM=="usb", ATTRS{idVendor}=="你的设备VendorID", ATTRS{idProduct}=="你的设备ProductID", RUN+="/bin/su pi -c '/home/pi/script.sh'"

替换你的设备VendorID和你的设备ProductID为实际值(可通过lsusb命令查看)。

方案3:系统级安装serial模块

如果不需要用户级隔离,直接用root权限安装serial模块,让所有用户都能访问:

sudo pip3 install pyserial

验证方法

可以在script.sh中添加一行输出环境变量,对比udev和终端的差异:

env > /home/pi/udev_env.txt

触发udev后,和终端执行env > /home/pi/terminal_env.txt的结果对比,重点看PATH、PYTHONPATH、HOME这几个变量的区别,能快速定位环境问题。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:48:30