`--no-cache-dir` ของ pip เหมาะกับอะไร?


131

ฉันเพิ่งเห็น--no-cache-dirการใช้งานในไฟล์ Docker ฉันไม่เคยเห็นธงนั้นมาก่อนและความช่วยเหลือไม่ได้อธิบาย:

 --no-cache-dir              Disable the cache.
  1. คำถาม: แคชคืออะไร?
  2. คำถาม: แคชใช้ทำอะไร?
  3. คำถาม: ทำไมฉันถึงต้องการปิดการใช้งาน?

longshot ใน q3: เพื่อประหยัดแรม?
60

4
เอกสารค่อนข้างครอบคลุมในเรื่องนี้: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan

2
ผลการค้นหาแรกของ Google ให้คำอธิบายที่ดีเกี่ยวกับการใช้งานpip.pypa.io/en/stable/reference/pip_install
mikea

3
เมื่อคุณสร้างภาพนักเทียบท่าคุณต้องการให้มันเบา ซึ่งจะช่วยหลีกเลี่ยงการขยายภาพด้วยไฟล์แคช
Victor Lamoine

3
@mikea แดกดันเพราะpip no-cache-dirนี่เป็นผลลัพธ์แรก
hlongmore

คำตอบ:


103
  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


เหตุใดฉันจึงต้องการจัดเก็บไฟล์การติดตั้ง
Martin Thoma

7
เพื่อหลีกเลี่ยงการดาวน์โหลดซ้ำแล้วซ้ำอีก สมมติว่าคุณถอนการติดตั้งโมดูลเมื่อคุณติดตั้งในครั้งต่อไปมันจะใช้ไฟล์จากแคช dir
Stack

8
อาโอเค. ดังนั้นสำหรับภาพนักเทียบท่าที่ใช้สำหรับการปรับใช้เท่านั้น (ด้วยเหตุนี้จึงไม่มี "การดำเนินการด้วยตนเอง") ไม่มีเหตุผลที่จะไม่ใช้--no-cache-dirใช่ไหม
Martin Thoma

7
ใช่ @MartinThoma ในภาพนักเทียบท่าการผลิตคุณต้องการใช้ pip --no-cache-dir เพราะไม่มีใครจะติดตั้งแพ็คเกจใด ๆ และพื้นที่เก็บข้อมูลก็มีค่ามากยิ่งขึ้น ...
Ozgur Ozturk

2
ฮ่า ๆ ฉันไม่คิดว่า OP แปลว่า "แคช" หมายความว่าอย่างไร " สำหรับคำถาม 1.
Arel

59

ฉันคิดว่ามีเหตุผลที่ดีที่จะใช้--no-cache-dirเมื่อคุณสร้างอิมเมจ Docker โดยปกติแคชจะไม่มีประโยชน์ในอิมเมจ Docker และคุณสามารถย่อขนาดภาพได้อย่างแน่นอนโดยปิดการใช้งานแคช


9
คุณสามารถใช้ENV PIP_NO_CACHE_DIR=1ใน docker สำหรับ python 3.6.10 และรูปภาพที่สูงกว่า
Levon

9

อีกเหตุผลหนึ่งในการปิดการใช้งาน pip cache - หากคุณเรียกใช้ pip ในฐานะผู้ใช้ที่ยังไม่มีอยู่โฮมไดเร็กทอรีของพวกเขาจะถูกสร้างขึ้น แต่เป็นของ root

สิ่งนี้เกิดขึ้นกับเราเมื่อสร้าง Amazon AMI ใน chroot - pip กำลังทำงานในฐานะผู้ใช้ที่มีอยู่ในเครื่อง builder แต่ไม่ได้อยู่ในคุก chroot ที่กำลังสร้าง 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งานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.