`--No-cache-dir` của pip là gì?


111

Gần đây tôi đã thấy --no-cache-dirnó được sử dụng trong một tệp Docker. Tôi chưa bao giờ nhìn thấy lá cờ đó trước đây và sự trợ giúp không giải thích nó:

 --no-cache-dir              Disable the cache.
  1. Câu hỏi: Bộ nhớ đệm là gì?
  2. Câu hỏi: Bộ nhớ đệm dùng để làm gì?
  3. Câu hỏi: Tại sao tôi muốn vô hiệu hóa nó?

Longshot trên q3: để tiết kiệm RAM?
Ma0

4
Tài liệu là khá rộng rãi trên mà một: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan

2
kết quả google đầu tiên đưa ra một mô tả khá tốt của nó sử dụng pip.pypa.io/en/stable/reference/pip_install
mikea

3
Khi bạn đang xây dựng một hình ảnh docker, bạn muốn nó nhẹ nhàng. Điều này giúp tránh làm phồng hình ảnh với các tệp được lưu trong bộ nhớ cache.
Victor Lamoine

2
@mikea Trớ trêu thay, pip no-cache-dirđây là kết quả đầu tiên.
hlongmore

Câu trả lời:


89
  1. Lưu trong bộ nhớ cache là : cất giữ trong ẩn hoặc để sử dụng sau
  2. Được dùng cho
  • lưu trữ các tệp cài đặt ( .whl, v.v.) của các mô-đun mà bạn cài đặt thông qua pip
  • lưu trữ các tệp nguồn ( .tar.gz, v.v.) để tránh tải xuống lại khi chưa hết hạn
  1. Lý do có thể bạn có thể muốn tắt bộ nhớ cache:
  • bạn không có dung lượng trên ổ cứng
  • trước đó đã chạy pip installvới các cài đặt không mong muốn
    • ví dụ:
      • trước đó đã chạy export PYCURL_SSL_LIBRARY=nsspip install pycurl
      • muốn chạy mới export PYCURL_SSL_LIBRARY=opensslpip install pycurl --compile --no-cache-dir
  • bạn muốn giữ một hình ảnh Docker càng nhỏ càng tốt

Liên kết đến tài liệu

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


Tại sao tôi muốn lưu trữ các tệp cài đặt?
Martin Thoma

7
Để tránh tải đi tải lại nhiều lần. Giả sử, bạn gỡ bỏ cài đặt một module, khi bạn cài đặt nó thời gian tới, nó sẽ sử dụng các tập tin từ thư mục lưu trữ
Ngăn xếp

7
À, được rồi. Vì vậy, cho một hình ảnh Docker mà chỉ được sử dụng cho việc triển khai (vì thế không có "bằng tay" hành động ") không có lý do để không sử dụng --no-cache-dir, có đúng không?
Martin Thoma

6
Có @MartinThoma, trên hình ảnh sản xuất Docker, bạn muốn sử dụng pip --no-cache-dir, bởi vì không ai khác sẽ cài đặt bất kỳ gói, và không gian lưu trữ thậm chí còn có giá trị hơn ...
Ozgur Ozturk

2
Haha Tôi không nghĩ OP có nghĩa là "'cache' có nghĩa là gì?" cho câu hỏi 1.
Arel

50

Tôi nghĩ rằng có một lý do chính đáng để sử dụng --no-cache-dirkhi bạn đang xây dựng hình ảnh Docker. Bộ nhớ đệm thường vô dụng trong hình ảnh Docker và bạn chắc chắn có thể thu nhỏ kích thước hình ảnh bằng cách tắt bộ nhớ cache.


7
bạn có thể sử dụng ENV PIP_NO_CACHE_DIR=1trong docker cho hình ảnh python 3.6.10 và cao hơn
Levon

9

Một lý do khác để vô hiệu hóa bộ đệm ẩn pip - nếu bạn chạy pip với tư cách là người dùng chưa tồn tại, thư mục chính của họ sẽ được tạo, nhưng thuộc sở hữu của root.

Điều này xảy ra với chúng tôi khi xây dựng Amazon AMI trong chroot - pip đang được chạy với tư cách người dùng tồn tại trên máy xây dựng, nhưng không phải trong nhà tù chroot nơi AMI đang được xây dựng. Đây là một vấn đề vì người dùng cụ thể bây giờ không thể ssh vào những gì vừa được xây dựng vì thư mục .ssh của họ không thể đọc được bởi họ.

Tôi không thể nghĩ ra lý do nào khác mà pip sẽ được chạy với tư cách là một người dùng không tồn tại, vì vậy nó rất là một trường hợp lợi hại.


4

Giảm kích thước hình ảnh docker của bạn nếu bạn có phụ thuộc python trong DockerFile của mình, vì đăng ký riêng tư / hệ thống tạo tác hoặc các dịch vụ triển khai của bạn có thể có giới hạn về kích thước.


0

Tôi gặp lỗi quyền khi cài đặt một số gói pip nếu tôi không sử dụng --no-cache-dirtùy chọn.

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 /.cachethư mục không giúp được vì một số lý do nhưng với --no-cache-dirnó hoạt động tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.