我想知道在构建容器时是否保留__pycache__
文件夹和.pyc
文件是好还是坏的做法。
一方面,你希望最小化容器的大小,但另一方面,你也不希望减慢容器的执行速度。
考虑到Python解释器是静态的,这些文件也可以被认为是静态的。
有人进行了性能测试并得出结论吗?
我想知道在构建容器时是否保留__pycache__
文件夹和.pyc
文件是好还是坏的做法。
一方面,你希望最小化容器的大小,但另一方面,你也不希望减慢容器的执行速度。
考虑到Python解释器是静态的,这些文件也可以被认为是静态的。
有人进行了性能测试并得出结论吗?
__pycache__
/.pyc
文件。更具体地说,我尝试构建和运行我的容器,使其在构建或运行时从不生成 .pyc
文件(通过将环境变量 PYTHONDONTWRITEBYTECODE=1
设置并通过 --no-compile --no-cache-dir
显式传递给所有 pip
调用,或通过 pip.conf
或等效环境变量),。import
所需的时间更长,但实际执行速度与之前一样快(字节码仍在内存中,只是不在磁盘上)。但是,在容器的情况下,使容器变得更大意味着缓存和启动所需的时间更长,因此您浪费了磁盘空间,而任何 Python 启动时间的提高通常都会被第一次拉取和启动容器的延迟所抵消。在运行时编写字节码是没有意义的;当容器关闭时,它将丢失,因此它增加了启动开销,却没有任何好处。.pyc
文件并不是那么糟糕的(尽管正如评论中所述,官方的 Dockerfile
会将它们删除);由于许多容器依赖于它们,基本 Python 映像已被缓存的可能性很高,并且许多预构建的 Python 映像已经拥有了它们(因此在事后删除它们也没有帮助),并且对于构建在其上的容器运行的程序,它确实稍微减少了启动时间。但是,对于每个容器的第三方安装,您只会得到无补偿的膨胀。
Dockerfile
来创建容器,这种情况下如果它们没有做到这点,当你依赖于它们时想要修复就为时已晚了,但是,确实,尽可能避免这样做是最好的。 - ShadowRanger