Служба не запускается, когда задействован внешний файл конфигурации журнала - PullRequest
0 голосов
/ 29 июня 2019

Я использую PyInstaller для объединения моего многомодульного приложения Python в one-file exe. Точкой входа для этого приложения является модуль, расширяющий win32serviceutil.ServiceFramework - поэтому он предназначен для работы в качестве службы Windows. Проблема возникает, когда я пытаюсь предоставить пользователю настраиваемый INI-файл регистратора с этим приложением. В моем основном модуле я настроил регистратор таким образом,

log_file_path = path.join(path.dirname(path.abspath(__file__)), 'logging.conf')
logging.config.fileConfig(log_file_path)

Моя команда PyInstaller выглядит следующим образом:

pyinstaller -F <main-file>.py -n <exe-name> --hidden-import=win32timezone --add-data "logging.conf;."

После упаковки я устанавливаю полученный exe как сервис, и он успешно регистрируется как сервис Windows. Однако, когда я пытаюсь запустить его, он терпит неудачу.

Интересно, что в моем настроенном месте создается пустой файл журнала. Таким образом, это означает, что 1) Приложение прочитало мой файл конфигурации, и 2) Здесь нет проблем с разрешениями. Кто-нибудь пытался создать что-то подобное, что могло бы помочь пролить свет на то, чего мне не хватает?

1 Ответ

0 голосов
/ 03 июля 2019

При использовании опции одного файла с PyInstaller мы не можем корректно использовать переменную __file__ в нашем коде, чтобы определить связанное приложение или его местоположение. Вместо этого PyInstaller устанавливает специальные системные переменные во время выполнения, такие как sys._MEIPASS и sys.executable; которые указывают временную папку, созданную загрузчиком для запуска приложения, и местоположение замороженного исполняемого файла (загрузчика) соответственно.

Как только я изменил свою манипуляцию пути, чтобы использовать эти переменные для поиска файла конфигурации журнала, файл успешно прочитан, и служба работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...