我不是python开发人员。 我尝试在启动机器期间启动python Web服务器脚本(https://github.com/rpiwalletui/qtum-ui)(raspbian stretch)。
我准备了一个init-d脚本,它似乎进行了有效的尝试,但是python脚本报告了缺少的依赖项。
如果我直接运行python3脚本,它可以正常工作。 但是尝试使用init.d systemctl脚本运行它时脚本失败并显示以下日志:
Jan 11 17:05:07 raspberrypi systemd[1]: Starting qtumui.service...
Jan 11 17:05:07 raspberrypi qtumui[12111]: Starting /home/pi/qtum-ui/app.py:Traceback (most recent call last):
Jan 11 17:05:07 raspberrypi qtumui[12111]: File "/home/pi/qtum-ui/app.py", line 3, in <module>
Jan 11 17:05:07 raspberrypi qtumui[12111]: from flask import Flask, render_template, request, flash, url_for, redirect, send_file
Jan 11 17:05:07 raspberrypi qtumui[12111]: ImportError: No module named 'flask'
Jan 11 17:05:07 raspberrypi qtumui[12111]: failed!
Jan 11 17:05:07 raspberrypi systemd[1]: Started qtumui.service.
这是init.d脚本
#! /bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/home/pi/qtum-ui/app.py
PIDFILE=/var/run/qtumui.pid
test -x $DAEMON || exit 0
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting $DAEMON"
start_daemon -p $PIDFILE $DAEMON
log_end_msg $?
;;
stop)
log_daemon_msg "Stopping $DAEMON"
killproc -p $PIDFILE $DAEMON
PID=`ps x |grep qtum | head -1 | awk '{print $1}'`
kill -9 $PID
log_end_msg $?
;;
force-reload|restart)
$0 stop
$0 start
;;
status)
status_of_proc -p $PIDFILE $DAEMON atd && exit 0 || exit $?
;;
*)
echo "Usage: /etc/init.d/qtumui {start|stop|restart|force-reload|status}"
exit 1
;;
esac
exit 0
有什么东西可以解决这个问题吗?
答案 0 :(得分:1)
好的,我设法找出了为什么缺少依赖项。
我使用“pip3”将依赖项安装为用户“pi”,在这种情况下,模块已安装到/home/pi/.local/lib/python3.5/dist-packages/
中。
init脚本作为其他默认用户(可能是root)运行,这就是脚本无法找到依赖项的原因。
要解决此问题,我需要将init-d脚本更改为以“pi”用户身份运行,但如果我以root身份安装所需的依赖项,则脚本也可以正常工作
sudo pip3 install flask Flask-WTF Flask-QRcode Flask-Bootstrap
在这种情况下,模块也可以在/usr/local/lib/python3.5/dist-packages/
中找到它的工作,因为一些所有权冲突,但服务起码至少。