Для чого корисний піп `--no-cache-dir`?


111

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

 --no-cache-dir              Disable the cache.
  1. Запитання: Що кешується?
  2. Питання: Для чого використовується кеш?
  3. Питання: Чому я б хотів його відключити?

longshot на q3: заощадити деяку оперативну пам’ять?
Ma0

4
Документація щодо цього доволі обширна: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan

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

3
Коли ви будуєте зображення докера, ви хочете, щоб він був світлим. Це допомагає уникнути здуття зображення кешованими файлами.
Віктор Ламойн

2
@mikea Як не дивно, адже pip no-cache-dirце зараз перший результат.
hlongmore

Відповіді:


90
  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
  • ви хочете зберегти зображення Докера якомога менше

Посилання на документацію

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


Чому я хочу зберігати інсталяційні файли?
Мартін Тома

7
Щоб уникнути завантаження знову і знову. Припустимо, ви видалите модуль, коли наступного разу встановите його, він використовуватиме файли з кешованого режиму
Стек

7
Ну гаразд. Тож для зображення докера, яке використовується лише для розгортання (отже, ніяких "ручних" дій ") немає причин не використовувати --no-cache-dir, правильно?
Мартін Тома

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

2
Ха-ха, я не думаю, що ОП означала "що означає" кешоване "?" за запитання 1.
Арель

50

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


7
ви можете використовувати ENV PIP_NO_CACHE_DIR=1в docker для python 3.6.10 та новіших зображень
Левон,

9

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

Це трапляється з нами під час створення AMI Amazon в chroot - pip запускається як користувач, який існує на машині builder, а не в тюрмі chroot, де будується AMI. Це проблематично, оскільки конкретний користувач тепер не може сшати те, що було створено, оскільки їх каталог .ssh не читається ними.

Я не можу придумати будь-яку іншу причину, коли pip би запускався як користувач, якого не існує, тому це дуже великий випадок.


4

Зменшіть розмір зображення докера, якщо у вашому DockerFile залежать пітони, оскільки у ваших приватних реєстрів / артефактів чи служб розгортання можуть бути обмежені розміри.


0

Я отримую помилку дозволу на встановлення деяких пакетів файлів, якщо не користуюся --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.