Для чего нужен pip `--no-cache-dir`?

Недавно я видел, как --no-cache-dir используется в файле Docker. Я никогда не видел этот флаг раньше, и помощь не объясняет это:

 --no-cache-dir              Disable the cache.
  • Вопрос: Что кэшируется?
  • Вопрос: Для чего используется кеш?
  • Вопрос: Почему я хочу отключить его?

Ответ 1

  1. Кэшируется: хранить в stashе или для будущего использования
  2. Используется для
    • сохранить установочные файлы (.whl и т.д.) модулей, которые вы устанавливаете через pip
    • хранить исходные файлы (.tar.gz и т.д.), чтобы избежать повторной загрузки, если не истек срок действия
  3. Возможная причина вы можете отключить кеш:
    • у вас нет места на жестком диске
    • ранее запустите pip install с неожиданными настройками
      • например:
        • ранее запустите export PYCURL_SSL_LIBRARY=nss и pip install pycurl
        • хочу новый запуск export PYCURL_SSL_LIBRARY=openssl и pip install pycurl --compile --no-cache-dir

Ссылки на документацию

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

Ответ 2

Я думаю, что есть веская причина использовать --no-cache-dir при создании образов Docker. Кеш обычно бесполезен в образе Docker, и вы можете определенно уменьшить размер изображения, отключив кеш.

Ответ 3

Еще одна причина отключить кэш pip - если вы запускаете pip от имени пользователя, которого еще нет, его домашний каталог будет создан, но принадлежит root.

Это происходит с нами, когда сборка Amazon AMI в chroot - pip запускается как пользователь, который существует на компьютере разработчика, но не в изолированной тюрьме, где создается AMI. Это проблематично, поскольку этот конкретный пользователь теперь не может использовать ssh для того, что только что было собрано, поскольку его каталог .ssh не доступен для чтения.

Я не могу думать о какой-либо другой причине, по которой pip будет работать как пользователь, которого не существует, так что это очень крайний случай.

Ответ 4

Уменьшите размер образа докера, если в DockerFile есть зависимости от python, поскольку ваши частные реестры/артефакты или ваши службы развертывания могут иметь ограничение по размеру.