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


116

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

 --no-cache-dir              Disable the cache.
  1. Вопрос: что кешируется?
  2. Вопрос: Для чего используется кеш?
  3. Вопрос: Зачем мне его отключать?

длинный снимок по q3: чтобы сэкономить оперативную память?
Ma0

4
Документация по этому поводу
emredjan 09

2
первый результат Google дает довольно хорошее описание его использования pip.pypa.io/en/stable/reference/pip_install
mikea 09

3
Когда вы создаете образ докера, вы хотите, чтобы он был легким. Это помогает избежать загромождения изображения кешированными файлами.
Victor Lamoine

2
@mikea По иронии судьбы, pip no-cache-dirэто первый результат.
hlongmore 01

Ответы:


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

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

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


Зачем мне хранить установочные файлы?
Мартин Тома

7
Чтобы избежать загрузки снова и снова. Предположим, вы удаляете модуль, и при его установке в следующий раз он будет использовать файлы из кэшированного
Stack

7
Ах хорошо. Итак, для образа докера, который используется только для развертывания (следовательно, без «ручных» действий), нет причин не использовать --no-cache-dir, верно?
Мартин Тома,

6
Да, @MartinThoma, в производственном образе докера вы хотите использовать pip --no-cache-dir, потому что никто другой не будет устанавливать никаких пакетов, а пространство для хранения еще более ценно ...
Озгур Озтюрк,

2
Ха-ха, я не думаю, что OP имел в виду «что означает« кэшировано »?» на вопрос 1.
Arel

50

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


7
вы можете использовать ENV PIP_NO_CACHE_DIR=1в докере для изображений Python 3.6.10 и выше
Левон

9

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

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

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


4

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


0

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

Building wheels for collected packages: pyyaml, bottleneck, nvidia-ml-py3
  WARNING: Building wheel for pyyaml failed: [Errno 13] Permission denied: '/home/user/.cache/pip/wheels/b1'
  WARNING: Building wheel for bottleneck failed: [Errno 13] Permission denied: '/home/user/.cache/pip/wheels/92'
  WARNING: Building wheel for nvidia-ml-py3 failed: [Errno 13] Permission denied: '/home/user/.cache/pip/wheels/7f'

chown /.cacheпапка почему-то не помогла, но с --no-cache-dirней работает нормально.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.