udev 规则调用的 Python 脚本无法导入模块 ModuleNotFound

udev 规则调用的 Python 脚本无法导入模块 ModuleNotFound

我有一条 udev 规则,每当块设备(USB 驱动器)连接到系统或从系统断开连接时,它都会触发一个 python 脚本。udev 规则似乎正确触发,但它调用的 python 脚本无法启动,因为它缺少导入。导入错误我得到 ModuleNotFound 错误。udev 脚本调用一个 bash 脚本,该脚本调用: python3 /root/projects/script.py --arg "$1" --arg2 >> /tmp/python3.log 2>&1 &

在 python3.log 中,我看到错误: ModuleNotFoundError: No module named 'requests'

我已经通过 以 root 身份安装了这个模块pip3 install requests,并且确实当从 root shell 手动调用时脚本工作正常,但是不知何故被 udev 调用时却不起作用。

如果我从根终端运行pip3 install requests我得到Requirement already satisfied: requests in /usr/local/lib/python3.9/dist-packages (2.27.1)

我认为这是一个路径问题?我该如何找出为什么 python 找不到此模块?

答案1

问题在于 Python 确定其“路径”的方式。我不知道这方面的最佳实践解决方案,但这是我所做的。从可以正常工作的 Python 控制台 ( sudo python3),我执行import requests此操作print(requests)以获取完整路径。这给了我<module 'requests' from '/usr/local/lib/python3.9/dist-packages/requests/__init__.py'>

因此,在我的 script.py 中,我将其添加到顶部

import os
import sys
sys.path.append(os.path.abspath("/usr/local/lib/python3.9/dist-packages"))

问题已解决

相关内容