Использование Как запустить скрипт Python в качестве службы в 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 \ Имя пользователя \ AppData \ Local \ Programs \ Python \ Python36 \ Scripts \ pipenv.exe
run python main.py
И он успешно запускает скрипт, даже если он импортирует в пакеты, установленные в pipenv (например, flask ). Затем я создал службу NSSM с:
- nssm.exe установить имя_службы "C: \ Users \ Имя пользователя \ AppData \ Local \ Programs \ Python \ Python36 \ Scripts \ pipenv.exe"
"запустить python main.py"
- nssm set ServiceName AppDirectory
"C: \ pipenvfolder \ Foo"
И каждые 2 секунды он создает каталог в c: \ temp. Все хорошо. Однако теперь я хочу импортировать один из установленных пакетов Pipenv, то есть пакет flask , установленный внутри pipenv. Поэтому я добавил «колбу для импорта» в тестовый скрипт выше.
Затем я настроил 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 не используется для запуска сценария так же, как при запуске из командной строки.