PyInstaller无缓冲stdi

2024-06-02 05:59:57 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

Docker图像大小通常应尽可能小。使用像standard python映像这样的成熟环境通常会导致在安装了所有依赖项的情况下,出现严重膨胀的映像。将python打包成独立的可执行文件(例如使用pyinstaller)是减少图像大小和总体复杂性的完美方法。在

环境python3.6pyinstaller==3.4

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

根据docs,应该可以在生成的可执行文件中添加运行时选项,例如uv和{}。但不幸的是,事实上它似乎并不管用。v和{}都正常工作,但是{}似乎完全被忽略了。在

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

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

这面旗子还有效吗?因为其他人工作了-是否在没有通知或更新文档的情况下被删除了?在

有没有其他方法可以在不修改python代码的情况下禁用stdio的缓冲(使用pyinstaller或外部),比如so?在

为什么要这么做?在

运行docker swarm服务时要避免缓冲IO。为了使可执行文件正确地实时登录到docker守护进程中,需要附加一个shell。但是,在swarm任务中附加tty shell使得处理日志变得更加复杂,甚至是不可能的。在


Tags: 方法docker代码图像可执行文件环境情况shell