什么是pip的`--no-cache-dir`有用吗?

Mar*_*oma 67 python pip

我最近看到--no-cache-dir在Docker文件中使用它.我以前从未见过那面旗帜而且帮助没有解释它:

 --no-cache-dir              Disable the cache.
Run Code Online (Sandbox Code Playgroud)
  1. 问题:什么是缓存?
  2. 问题:缓存用于什么?
  3. 问题:我为什么要禁用它?

Sta*_*ack 54

  1. 缓存:存放在隐藏或将来使用
  2. 它用于存储通过pip安装的模块的安装文件(.whl等).
  3. 如果您的硬盘驱动器上没有空间,则可能需要禁用它

文档链接

https://pip.pypa.io/en/stable/reference/pip_install/#caching - @emredjan https://pip.pypa.io/en/stable/reference/pip_install/ - @mikea

  • 是的@MartinThoma,在生产 docker 映像上,您想使用 pip --no-cache-dir,因为没有其他人会安装任何软件包,并且存储空间更有价值... (12认同)
  • 为什么我要存储安装文件? (6认同)
  • 避免一次又一次下载.假设,卸载模块,下次安装时,它将使用缓存目录中的文件 (5认同)
  • 哈哈,我不认为 OP 的意思是“'缓存'是什么意思?” 对于问题 1。 (5认同)
  • 喔好吧.因此,对于仅用于部署的docker镜像(因此没有"手动"动作"),没有理由不使用`--no-cache-dir`,对吗? (4认同)

Phi*_*zou 11

我认为在--no-cache-dir构建Docker映像时有充分的理由使用。缓存在Docker映像中通常是无用的,并且您可以通过禁用缓存来缩小映像大小。

  • 您可以在 docker 中使用 [`ENV PIP_NO_CACHE_DIR=1`](/sf/answers/4218919701/) 来获取 python 3.6.10 及更高版本的图像 (20认同)
  • 对于 docker 镜像,执行“RUN pip install --no-cache-dir -rrequirements.txt” (2认同)
  • @AlexPeters 取决于您如何进行多阶段构建。我发现最干净的方法是在构建器映像中安装包并将整个“site-packages/”复制到最终映像。这样,您就不需要使用 `pip` 的任何额外参数,因为不会复制缓存。 (2认同)

小智 7

禁用pip缓存的另一个原因-如果您以不存在的用户身份运行pip,则将创建其主目录,但由root拥有。

在chroot中构建Amazon AMI时,这会发生在我们身上-pip以构建器机器上的用户身份运行,而不是在构建AMI的chroot监狱中。这是有问题的,因为特定用户现在无法SSH到刚刚构建的内容,因为他们无法读取其.ssh目录。

我想不出任何其他原因来以不存在的用户身份运行pip,因此这是一个非常极端的情况。


Zoe*_* Li 6

如果您的 DockerFile 中有 python 依赖项,请减小您的 docker 镜像大小,因为您的私有注册表/人工工厂或您的部署服务可能有大小限制。