使用How do you run a Python script as a service in Windows? 我可以获得一个 python 脚本作为服务运行。使用我制作的以下代码对其进行了测试:
import os
from time import sleep
from random import *
# import flask <-- This line breaks it only when run from NSSM
count = 0
while True:
num = randint(1, 10000)
count+=1
os.mkdir("C:\\temp\\" + str(count) + '_' + str(num))
sleep(2)
我首先运行以下命令来测试要放入 NSSM 的可执行文件和参数:
- cd C:\pipenvfolder\foo
- C:\Users\Username\AppData\Local\Programs\Python\Python36\Scripts\pipenv.exe 运行 python main.py
它成功启动脚本,即使它已经导入到安装在 pipenv 中的包(例如flask)。然后我创建了一个 NSSM 服务:
- nssm.exe 安装 ServiceName "C:\Users\Username\AppData\Local\Programs\Python\Python36\Scripts\pipenv.exe" "运行 python main.py"
- nssm 设置服务名称 AppDirectory "C:\pipenvfolder\foo"
每 2 秒它会在 c:\temp 中创建一个目录。一切都很好。但是现在我希望导入已安装的 Pipenv 包之一,即安装在 pipenv 中的烧瓶包。所以我在上面的测试脚本中添加了“import flask”。
然后我将 NSSM 设置为有一个错误日志并检查它为什么无法启动,并且它无法导入烧瓶模块:
Traceback (most recent call last):
File "main.py", line 7, in <module>
import flask
ModuleNotFoundError: No module named 'flask'
nssm服务必须在正确的应用程序目录中启动,否则将找不到main.py
. 从正确的目录调用它是指定 pipenv 的。因此,我无法弄清楚为什么 pipenv 没有被用于以与通过命令行运行时相同的方式运行脚本。