Docker映像大小通常应尽可能小。在安装了所有依赖项之后,经常使用standard python映像之类的成熟环境会导致文件过大。将python打包到独立的可执行文件中(例如使用pyinstaller)是减少映像大小和整体复杂性的理想方法。
环境:python3.6
,pyinstaller==3.4
出现的问题是,python默认使用默认的缓冲stdio。这可以通过使用python -u ...
运行python脚本来缓解。但是使用pyinstaller时无法访问。
根据docs,应该可以向生成的可执行文件中添加运行时选项,例如u
,v
和W ...
。但不幸的是,实际上它似乎不起作用。 v
和W
都可以正常工作,但是u
似乎被完全忽略了。
以下代码片段显示了用法:
...
exe = EXE(...
[('u', None, 'OPTION')],
name="myapp",
...)
...
此标志仍然有效吗?由于其他工具都能正常工作-是否已将其删除而不通知或更新文档?
是否有其他方法可以禁用stdio的缓冲(使用pyinstaller或在外部),不修改python代码,例如so?
运行docker swarm服务时,应避免使用缓冲的IO。为了使可执行文件正确地实时登录到Docker守护程序,必须附加一个Shell。但是,将tty shell附加到swarm任务上会使处理日志变得非常复杂,甚至是不可能的。