PyInstaller无缓冲stdio

问题描述 投票:4回答:1

问题

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任务将使日志的处理变得非常复杂,甚至是不可能的。

问题Docker映像大小通常应尽可能小。使用成熟的环境(如标准python图像)通常会在安装了所有依赖项的情况下,变得heavily肿不堪...

python docker pyinstaller stdio
1个回答
0
投票

我试图删除我以前的评论,但没有该选项。对不起!

© www.soinside.com 2019 - 2024. All rights reserved.