Сценарий Python в Pipenv как служба Windows с NSSM

Использование Как запустить скрипт 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. компакт-диск C:\pipenvfolder\foo
  2. C:\Users\Имя пользователя\AppData\Local\Programs\Python\Python36\Scripts\pipenv.exe запустить python main.py

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

  1. nssm.exe install ServiceName "C:\Users\Username\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 не используется для запуска скрипта так же, как при запуске через командную строку.


person run_the_race    schedule 20.04.2019    source источник


Ответы (2)


Создайте пакетный файл, который вызывает вашу виртуальную среду. Получите путь к виртуальному окружению:

pipenv --venv

сервис.bat

call path/to/.virtualenv/Scripts/activate.bat
call python main.py

Установите службу с помощью nssm, которая вызывает этот командный файл.

person Blue Three Wheeler    schedule 13.09.2019

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

person run_the_race    schedule 21.04.2019
comment
та же проблема... но ваше решение не идеально - person guilhermecgs; 11.06.2019