在Jetson Nano上通过systemd service运行Python脚本pip库不识别求助
问题根因
systemd运行服务时的环境变量与你登录后交互shell的环境变量不一致:你通过pip安装的第三方库如果是加了--user参数安装,或默认安装在当前用户的专属.local目录下,systemd默认未加载对应普通用户的环境配置,或是默认用root用户启动服务,因此无法识别到对应库。
解决方案
先获取你的Python环境的关键路径
打开终端执行以下命令,记录返回结果:- 获取Python解释器绝对路径:
which python3 - 获取Python库搜索路径,找到你用户目录下的site-packages路径:
python3 -c "import sys; print('\n'.join(sys.path))"
通常用户级pip安装的库都在/home/你的用户名/.local/lib/python3.x/site-packages路径下。
- 获取Python解释器绝对路径:
修改你的systemd service文件
在[Service]段新增/修改以下配置:- 指定运行服务的用户为你平时正常运行脚本的普通用户,避免用root运行找不到用户级安装的库:
User=替换为你的用户名 WorkingDirectory=替换为你的Python脚本所在的文件夹绝对路径 - ExecStart使用Python解释器的绝对路径执行脚本,不要直接写python3:
ExecStart=替换为第一步查到的Python绝对路径 替换为你的脚本绝对路径 - 如果以上配置后仍报错,手动指定PYTHONPATH环境变量,填入第一步查到的用户site-packages路径:
Environment="PYTHONPATH=替换为第一步查到的用户site-packages绝对路径"
如果你使用了venv/conda等虚拟环境,直接用虚拟环境内的Python解释器绝对路径填入ExecStart即可,无需额外配置PYTHONPATH。
- 指定运行服务的用户为你平时正常运行脚本的普通用户,避免用root运行找不到用户级安装的库:
生效配置并验证
执行以下命令重载配置并重启服务:sudo systemctl daemon-reload sudo systemctl restart 你的服务名.service如果仍有报错,执行
sudo journalctl -u 你的服务名.service -f查看详细日志排查问题。
内容的提问来源于stack exchange,提问作者Zac Boussaid
相关产品推荐
相关产品推荐

