Сценарий Python в Pipenv как служба Windows с NSSM - PullRequest
1 голос
/ 20 апреля 2019

Использование Как запустить скрипт 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, сначала запустив следующее:

  1. cd C: \ pipenvfolder \ foo
  2. C: \ Users \ Имя пользователя \ AppData \ Local \ Programs \ Python \ Python36 \ Scripts \ pipenv.exe run python main.py

И он успешно запускает скрипт, даже если он импортирует в пакеты, установленные в pipenv (например, flask ). Затем я создал службу NSSM с:

  1. nssm.exe установить имя_службы "C: \ Users \ Имя пользователя \ AppData \ Local \ Programs \ Python \ Python36 \ Scripts \ pipenv.exe" "запустить python main.py"
  2. 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 не используется для запуска сценария так же, как при запуске из командной строки.

1 Ответ

0 голосов
/ 21 апреля 2019

Я сомневаюсь, что это получит какие-либо ответы, но если у кого-то есть такая же проблема. Я обошел проблему, создав exe-файл с помощью pyinstaller. Это довольно быстро и легко сделать. Затем я передал .exe в NSSM как исполняемый файл для запуска.

...