PyInstaller无缓冲stdio

时间:2018-09-12 19:44:50

标签: python docker pyinstaller stdio

问题

Docker映像大小通常应尽可能小。在安装了所有依赖项之后,经常使用standard python映像之类的成熟环境会导致文件过大。将python打包到独立的可执行文件中(例如使用pyinstaller)是减少映像大小和整体复杂性的理想方法。

环境python3.6pyinstaller==3.4

出现的问题是,python默认使用默认的缓冲stdio。这可以通过使用python -u ...运行python脚本来缓解。但是使用pyinstaller时无法访问。

根据docs,应该可以向生成的可执行文件中添加运行时选项,例如uvW ...。但不幸的是,实际上它似乎不起作用。 vW都可以正常工作,但是u似乎被完全忽略了。

以下代码片段显示了用法:

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

此标志仍然有效吗?由于其他工具都能正常工作-是否已将其删除而不通知或更新文档?

是否有其他方法可以禁用stdio的缓冲(使用pyinstaller或在外部),修改python代码,例如so

为什么会这样?

运行docker swarm服务时,应避免使用缓冲的IO。为了使可执行文件正确地实时登录到Docker守护程序,必须附加一个Shell。但是,将tty shell附加到swarm任务上会使处理日志变得非常复杂,甚至是不可能的。

1 个答案:

答案 0 :(得分:0)

至少它在 Windows 上已损坏(请参阅 issue on github)并且不在 docs 中。