首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Docker映像中安装依赖项后删除pip缓存

在Docker映像中安装依赖项后删除pip缓存
EN

Stack Overflow用户
提问于 2022-11-29 15:46:17
回答 1查看 22关注 0票数 0

我注意到,由于在/root/.cache/pip中保留pip缓存,所以坞映像可能很大。我知道在我的docker映像中安装了我所有的依赖项之后,我可以删除这个目录。我不确定这与docker的BuildKit有什么关系,它允许通过使用缓存来更快地安装。这两者之间有某种联系吗?因此,如果我想从BuildKit中受益,那么删除/root/.cache/pip安全吗?我的问题的动机是像torch和nvidia这样的沉重的python依赖关系,它们可能占用很少的GB。删除pip缓存可能会使图像的大小减少2-3 GB。

EN

回答 1

Stack Overflow用户

发布于 2022-11-29 15:50:35

这里更好的解决方案是,首先不要缓存包(无论如何,您不会需要它们;映像构建过程不会从它们中受益,除非您正在做一些糟糕的事情)。

最简单的解决方案是将--no-cache-dir传递给您的pip调用,它首先不会将包缓存到磁盘。或者,您可以删除包含以下内容的pip.conf

代码语言:javascript
复制
[global]
no-cache-dir = True

对容器中的/etc/pip.conf进行全局禁用(不需要每次传递交换机)。注意,如果您的映像附带了19.0.1之前的pip版本,那么pip.conf解决方案是错误的;如果是这样的话,您可以使用--no-cache-dir命令行开关手动将pip更新到后19.0.1版本,然后修改/etc/pip.conf以在需要时添加额外的行。

奖励:您可能希望将pip.conf扩展到:

代码语言:javascript
复制
[install]
compile = no

[global]
no-cache-dir = True

compile = no告诉pip在安装时不要将pip源文件编译成字节码;预编译字节码的好处是(稍微)更快启动,但是通过放大映像,下载/运行它需要更长的时间,所以Docker层的成本超过了启动本身的任何节省。

最后,增加:

代码语言:javascript
复制
ENV PYTHONDONTWRITEBYTECODE=1

到您的Dockerfile (可以与其他ENV设置结合,以避免额外的层)在文件顶部附近。如果pip.conf阻止在安装时编译/写入字节码,环境变量将阻止在运行时写入字节码(这将是一个毫无意义的练习;当容器退出时,字节码无论如何都会丢失)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74616667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档