Apa kegunaan pip `--no-cache-dir`?

111

Saya baru-baru ini melihat --no-cache-diryang digunakan dalam file Docker. Saya belum pernah melihat bendera itu sebelumnya dan bantuannya tidak menjelaskannya:

 --no-cache-dir              Disable the cache.
  1. Pertanyaan: Apa itu cache?
  2. Pertanyaan: Untuk apa cache digunakan?
  3. Pertanyaan: Mengapa saya ingin menonaktifkannya?
Martin Thoma
sumber
longshot pada q3: untuk menghemat RAM?
Ma0
4
Dokumentasi cukup ekstensif untuk yang satu itu: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan
2
hasil google pertama memberikan deskripsi yang cukup bagus tentang penggunaannya pip.pypa.io/en/stable/reference/pip_install
mikea
3
Ketika Anda sedang membangun citra buruh pelabuhan, Anda ingin itu menjadi ringan. Ini membantu menghindari membengkaknya gambar dengan file cache.
Victor Lamoine
2
@mikea Ironisnya, karena pip no-cache-dir, sekarang ini adalah hasil pertama.
hlongmore

Jawaban:

90
  1. Cache adalah : simpan dalam persembunyian atau untuk digunakan di masa mendatang
  2. Digunakan untuk
  • menyimpan file instalasi ( .whl, dll) dari modul yang Anda instal melalui pip
  • simpan file sumber ( .tar.gz, dll) untuk menghindari pengunduhan ulang saat tidak kedaluwarsa
  1. Kemungkinan Alasan Anda mungkin ingin menonaktifkan cache:
  • Anda tidak memiliki ruang di hard drive Anda
  • sebelumnya dijalankan pip installdengan tak terduga pengaturan
    • misalnya:
      • menjalankan sebelumnya export PYCURL_SSL_LIBRARY=nssdanpip install pycurl
      • ingin lari baru export PYCURL_SSL_LIBRARY=openssldanpip install pycurl --compile --no-cache-dir
  • Anda ingin menjaga image Docker sekecil mungkin

Tautan ke dokumentasi

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

Tumpukan
sumber
Mengapa saya ingin menyimpan file instalasi?
Martin Thoma
7
Untuk menghindari mengunduh lagi dan lagi. Misalkan, Anda menghapus modul, ketika Anda menginstalnya lain kali, modul akan menggunakan file dari direktori yang di-cache
Stack
7
Ah, baiklah. Jadi untuk gambar buruh pelabuhan yang hanya digunakan untuk penyebaran (sehingga tidak ada "manual" tindakan ") tidak ada alasan untuk tidak menggunakan --no-cache-dir, benar?
Martin Thoma
6
Ya @MartinThoma, pada image buruh pelabuhan produksi, Anda ingin menggunakan pip --no-cache-dir, karena tidak ada orang lain yang akan menginstal paket apa pun, dan ruang penyimpanan bahkan lebih berharga ...
Ozgur Ozturk
2
Haha Saya tidak berpikir OP berarti "apa artinya 'cache'?" untuk pertanyaan 1.
Arel
50

Saya pikir ada alasan bagus untuk digunakan --no-cache-dirsaat Anda membuat image Docker. Cache biasanya tidak berguna dalam gambar Docker, dan Anda pasti dapat mengecilkan ukuran gambar dengan menonaktifkan cache.

Philip Tzou
sumber
7
Anda dapat menggunakan ENV PIP_NO_CACHE_DIR=1buruh pelabuhan untuk python 3.6.10 dan gambar yang lebih tinggi
Levon
9

Alasan lain untuk menonaktifkan cache pip - jika Anda menjalankan pip sebagai pengguna yang belum ada, direktori home-nya akan dibuat, tetapi dimiliki oleh root.

Ini terjadi pada kami saat membangun AMI Amazon di chroot - pip dijalankan sebagai pengguna yang ada di mesin pembuat, tetapi tidak di penjara chroot tempat AMI sedang dibuat. Ini bermasalah karena pengguna tertentu sekarang tidak dapat melakukan ssh ke apa yang baru saja dibuat karena direktori .ssh mereka tidak dapat dibaca oleh mereka.

Saya tidak dapat memikirkan alasan lain mengapa pip akan dijalankan sebagai pengguna yang tidak ada, jadi ini kasus yang sangat sulit.

PacketFiend
sumber
4

Kurangi ukuran gambar buruh pelabuhan Anda jika Anda memiliki dependensi python di DockerFile Anda, karena registri / artifaktori pribadi atau layanan penerapan Anda mungkin memiliki batasan ukuran.

Zoe Si Paranoid
sumber
0

Saya mendapatkan kesalahan izin untuk instalasi beberapa paket pip jika saya tidak menggunakan --no-cache-diropsi.

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 /.cachefolder tidak membantu untuk beberapa alasan tetapi dengan --no-cache-diritu berfungsi dengan baik.

Harvey
sumber