Pip "--no-cache-dir" ne işe yarar?


111

Yakın zamanda --no-cache-dirbir Docker dosyasında kullanıldığını gördüm . Bu bayrağı daha önce hiç görmedim ve yardım bunu açıklamıyor:

 --no-cache-dir              Disable the cache.
  1. Soru: Önbelleğe alınan nedir?
  2. Soru: Önbellek ne için kullanılır?
  3. Soru: Neden devre dışı bırakmak isteyeyim?

q3'te longshot: biraz RAM kaydetmek için?
Ma 0

4
Belgeler bu konuda oldukça kapsamlı: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan

2
ilk google sonucu, kullanımının oldukça iyi bir açıklamasını verir pip.pypa.io/en/stable/reference/pip_install
mikea

3
Bir docker görüntüsü oluştururken hafif olmasını istersiniz. Bu, görüntünün önbelleğe alınmış dosyalarla şişirilmesini önlemeye yardımcı olur.
Victor Lamoine

2
@mikea İronik olarak, çünkü pip no-cache-dirbu artık ilk sonuç.
hlongmore

Yanıtlar:


90
  1. Önbelleğe alınmış : saklamak veya ileride kullanmak üzere saklayın
  2. İçin kullanılır
  • kurulum dosyalarını saklayın (.whlpip aracılığıyla kurduğunuz modüllerin vb.)
  • .tar.gzsüresi dolmadığında yeniden indirmeyi önlemek için kaynak dosyaları ( vb.) saklayın
  1. Önbelleği devre dışı bırakmak isteyebileceğiniz olası neden:
  • sabit sürücünüzde yeriniz yok
  • Daha önce koşmak pip installile beklenmedik ayarlarla
    • Örneğin:
      • önceden koştu export PYCURL_SSL_LIBRARY=nssvepip install pycurl
      • yeni koşmak istiyorum export PYCURL_SSL_LIBRARY=opensslvepip install pycurl --compile --no-cache-dir
  • bir Docker görüntüsünü olabildiğince küçük tutmak istiyorsanız

Belgelere bağlantılar

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


Kurulum dosyalarını neden saklamak isteyeyim?
Martin Thoma

7
Tekrar tekrar indirmekten kaçınmak için. Bir modülü kaldırdığınızı varsayalım, bir dahaki sefere kurduğunuzda, önbelleğe alınmış dizindeki dosyaları kullanacaktır
Stack

7
Ah tamam. Yani, yalnızca dağıtım için kullanılan (dolayısıyla "manuel" eylemler "olmayan) bir docker görüntüsü için kullanmamak için bir neden yok --no-cache-dir, doğru mu?
Martin Thoma

6
Hiç kimse herhangi paketleri yükleyecektir Evet çünkü @MartinThoma bir üretim liman işçisi görüntü üzerinde, sen pip no-cache-dir kullanmak istiyorum ve depolama alanı daha da değerli ... olduğunu
Özgür Öztürk

2
Haha OP'nin "önbelleğe alınmış" ne anlama geldiğini kastettiğini sanmıyorum? 1. soru için
Arel

50

--no-cache-dirDocker görüntüleri oluştururken kullanmak için iyi bir neden olduğunu düşünüyorum . Bir Docker görüntüsünde önbellek genellikle işe yaramaz ve önbelleği devre dışı bırakarak kesinlikle görüntü boyutunu küçültebilirsiniz.


7
ENV PIP_NO_CACHE_DIR=1docker'da python 3.6.10 ve üzeri görüntüler için kullanabilirsiniz
Levon

9

Pip önbelleğini devre dışı bırakmak için başka bir neden - henüz mevcut olmayan bir kullanıcı olarak pip çalıştırırsanız, onların ana dizini oluşturulur, ancak sahip olunur kök.

Bu, bir chroot'ta Amazon AMI'leri oluştururken başımıza gelir - pip, oluşturucu makinede bulunan bir kullanıcı olarak çalıştırılır, ancak AMI'nin oluşturulduğu chroot hapishanesinde çalıştırılmaz. Bu sorunludur, çünkü belirli bir kullanıcı, .ssh dizini onlar tarafından okunamadığından, az önce oluşturulmuş olanı ssh yapamaz.

Pip'in var olmayan bir kullanıcı olarak çalıştırılmasının başka bir nedeni olduğunu düşünemiyorum, bu yüzden bu oldukça uç bir durum.


4

Özel kayıtlarınız / yapılarınız veya dağıtım servislerinizin boyut sınırlaması olabileceğinden DockerFile'ınızda python bağımlılıkları varsa docker görüntü boyutunuzu azaltın.


0

--no-cache-dirSeçeneği kullanmazsam bazı pip paketlerinin kurulumu için izin hatası alıyorum .

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 /.cacheklasör nedense yardımcı olmadı ama onunla --no-cache-diriyi çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.