使用如何在Windows中将Python脚本作为服务运行?,我可以让一个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 run python main.py
即使它导入了安装在pipenv中的软件包(例如flask),它也可以成功启动脚本。然后,我创建了一个NSSM服务:
- nssm.exe install ServiceName "C:\Users\Username\AppData\Local\Programs\Python\Python36\Scripts\pipenv.exe" "run python main.py"
- nssm set ServiceName AppDirectory "C:\pipenvfolder\foo"
每2秒钟,它就会在C:\temp中创建一个目录。一切都很好。但是现在我想要导入其中一个已安装的Pipenv软件包,即pipenv中安装的flask软件包。因此,我在上面的测试脚本中添加了“import flask”。
然后,我设置了NSSM以具有错误日志,并检查了为什么无法启动,结果发现无法导入flask模块:
Traceback (most recent call last):
File "main.py", line 7, in <module>
import flask
ModuleNotFoundError: No module named 'flask'
nssm 服务必须在正确的应用程序目录中启动,否则将无法找到 main.py
.从正确的目录中调用它可以指定 pipenv.因此,我无法确定为什么 pipenv 没有被用来运行脚本,就像通过命令行运行时一样。