当将 Python 脚本作为服务运行时,出现找不到模块的情况

当将 Python 脚本作为服务运行时,出现找不到模块的情况

我有一个小脚本,它使用 flask 监听 API 请求并将它们转发给 Home Assistant 和 InfluxDB。它目前有一个虚拟名称“script.py”,并放置在 /usr/local/bin 中。当我使用 独立运行它时,python3 script.py它运行良好。

因为我希望这个脚本一直运行,所以我想把它作为一个服务。我在 /usr/local/etc/rc.d/ 中创建了以下服务

#!/bin/sh

# PROVIDE: rest
# REQUIRE: DAEMON NETWORKING
# BEFORE: LOGIN
# KEYWORD: shutdown

. "/etc/rc.subr"
location="/usr/local/bin"
name="script"
rcvar=rest_enable

: ${rest_enable:="YES"}
logfile="/var/log/rest/${name}.log"
command="$location/$name.py"
command_args="$1"
command_interpreter="/usr/local/bin/python3"

load_rc_config $name
run_rc_command "$1"

输出为

Starting script.
Traceback (most recent call last):
 File /usr/local/bin/script.py", line 4, in <module>
  from flask import Flask, request, Response
ModuleNotFoundError: No module named 'flask'
/usr/local/etc/rc.d/rest: WARNING: failed to start script

在 python3 上运行 whereis 会产生以下内容:

root@grafana:/usr/local/etc/rc.d # whereis python3
python3: /usr/local/bin/python3

所以从我的理解来看,这应该没问题。我遗漏了什么?

答案1

大致来说有三种选择:

  1. 您已通过运行以下命令以用户身份安装了 flaskpip3 install flask
  2. 作为用户,您有一个虚拟环境。

在系统范围内安装 flask 模块,在脚本中指定 flask 的绝对路径,或者设置适当的 venv。

相关内容