p-j*_*j-e 9 python stdio pyinstaller docker
Docker 映像大小通常应尽可能小。使用像标准 python映像这样的成熟环境,在安装了所有依赖项的情况下,经常会导致严重臃肿的映像。将 python 打包成独立的可执行文件(例如使用 pyinstaller)是减少图像大小和整体复杂性的完美方式。
环境:python3.6,pyinstaller==3.4
出现的问题是,python 使用每个默认的缓冲 stdio。这可以通过使用python -u .... 但是在使用 pyinstaller 时变得无法访问。
根据文档,应该可以向生成的可执行文件添加运行时选项,例如u,v和W ...。但不幸的是,实际上它似乎不起作用。两者,v并且W,正常工作,但u似乎被完全忽略。
以下代码段显示了用法:
...
exe = EXE(...
[('u', None, 'OPTION')],
name="myapp",
...)
...
Run Code Online (Sandbox Code Playgroud)
这个标志还有效吗?由于其他人工作 - 它是否在没有通知或更新文档的情况下被删除?
是否有替代方法可以禁用 stdio 缓冲(使用 pyinstaller 或外部),而不像这样修改 python 代码?
在运行 docker swarm 服务时,应避免缓冲 IO。为了使可执行文件正确地实时登录到 docker 守护进程,有必要附加一个 shell。但是将 tty shell 附加到 swarm 任务会使处理日志变得更加复杂,甚至是不可能的。