PyInstaller небуферизованный stdio - PullRequest
       34

PyInstaller небуферизованный stdio

0 голосов
/ 12 сентября 2018

Задача

Размеры изображения Docker обычно должны быть как можно меньше. Использование полноценных сред, таких как стандартное изображение Python , часто приводит к сильно раздутым изображениям со всеми установленными зависимостями. Упаковка python в автономные исполняемые файлы (например, с использованием pyinstaller) - это идеальный способ уменьшения размеров изображений и общей сложности.

Окружающая среда : python3.6, pyinstaller==3.4

Проблема заключается в том, что python использует буферизованную stdio по умолчанию. Этого можно избежать, запустив скрипты на Python с python -u .... Но становится недоступным при использовании pyinstaller.

В соответствии с документами должна быть возможность добавить опции времени выполнения, такие как u, v и W ..., к сгенерированному исполняемому файлу. Но, к сожалению, в действительности это не работает. И v, и W работают нормально, но u, похоже, полностью игнорируется.

Следующий фрагмент показывает использование:

...
exe = EXE(...
          [('u', None, 'OPTION')],
          name="myapp",
          ...)
...

Этот флаг все еще действует? Поскольку остальные работают - он был удален без уведомления или обновления документов?

Существуют ли альтернативы для отключения буферизации stdio (с помощью pyinstaller или также извне), без изменения кода Python, например , так что ?

Зачем это нужно?

Следует избегать буферизованного ввода-вывода при запуске сервисов Docker Swarm. Чтобы заставить исполняемый файл правильно войти в систему в режиме реального времени для демона Docker, необходимо прикрепить оболочку. Но прикрепление tty-оболочки к задачам роя делает работу с журналами намного, намного более сложной, если вообще невозможной.

...