Lỗi bộ nhớ khi sử dụng pip cài đặt Matplotlib


91

Tôi đang sử dụng Python 2.7, Nếu tôi cố gắng cài đặt Matplotlib, tôi gặp lỗi này nếu tôi sử dụng "pip install matplotlib"

 Exception:
  Traceback (most recent call last):
    File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 232, in main
      status = self.run(options, args)
    File "/usr/local/lib/python2.7/dist-packages/pip/commands/install.py", line 339, in run
      requirement_set.prepare_files(finder)
    File "/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py", line 355, in prepare_files
      do_download, session=self.session,
    File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 782, in unpack_url
      session,
    File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 667, in unpack_http_url
      from_path, content_type = _download_http_url(link, session, temp_dir)
    File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 843, in _download_http_url
      _download_url(resp, link, content_file)
    File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 615, in _download_url
      for chunk in progress_indicator(resp_read(4096), 4096):
    File "/usr/local/lib/python2.7/dist-packages/pip/utils/ui.py", line 46, in iter
      for x in it:
    File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 580, in resp_read
      decode_content=False):
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/response.py", line 256, in stream
      data = self.read(amt=amt, decode_content=decode_content)
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/response.py", line 186, in read
      data = self._fp.read(amt)
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/cachecontrol/filewrapper.py", line 54, in read
      self.__callback(self.__buf.getvalue())
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/cachecontrol/controller.py", line 205, in cache_response
      self.serializer.dumps(request, response, body=body),
    File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/cachecontrol/serialize.py", line 81, in dumps
      ).encode("utf8"),
  MemoryError"

Vấn đề có thể là gì? Tôi đang sử dụng raspberry Pi 2 với thẻ SD 16gb. Tôi vẫn còn trống 8gb dữ liệu nhưng vẫn gặp lỗi này. Giúp đỡ một cách tử tế

Câu trả lời:


295

Lỗi này xuất hiện bởi vì có vẻ như cơ chế bộ nhớ đệm của pip đang cố gắng đọc toàn bộ tệp vào bộ nhớ trước khi lưu vào bộ nhớ đệm… điều này gây ra vấn đề trong môi trường bộ nhớ hạn chế, vì matplotlib là ~ 50mb.

Một giải pháp đơn giản hơn, cho đến khi pip được vá để sử dụng thuật toán bộ nhớ đệm không gian không đổi, là chạy pipvới --no-cache-dirđể tránh bộ nhớ cache:

$ pip --no-cache-dir install matplotlib

9
Gặp sự cố này trên Raspberry Pi. Đã giải quyết!
fdelia

7
Cũng có vấn đề này trên Raspberry Pi 2A và điều này đã giải quyết được nó!
8one 6

2
Giải quyết vấn đề của tôi trong hộp lang thang của tôi, mặc dù tôi không hiểu tại sao hộp lang thang của tôi đang chạy với bộ nhớ hạn chế như vậy
johnklawlor

1
Đã gặp sự cố tương tự trên Raspberry Pi 3B + và được giải quyết bằng cách sử dụng hướng dẫn ở trên.
Charles Poon

1
Gặp sự cố này khi cài đặt matplotlib trên BeagleBone Black. Giải pháp này đã sửa nó. Cảm ơn bạn!
David Stein

31

Có vẻ như bạn không đủ RAM để xây dựng matplotlib từ đầu. Để khắc phục điều đó, hãy bật hoán đổi:

# create swap file of 512 MB
dd if=/dev/zero of=/swapfile bs=1024 count=524288
# modify permissions
chown root:root /swapfile
chmod 0600 /swapfile
# setup swap area
mkswap /swapfile
# turn swap on
swapon /swapfile

Hoặc, nếu bạn đã cài đặt raspbian trên thẻ SD của mình, bạn có thể cài đặt matplotlib từ kho lưu trữ:

apt-get install python-matplotlib

Xin chào, tôi đã thử hoán đổi nhưng vẫn gặp lỗi tương tự.
thứ

nếu tôi cung cấp "sudo apt-get install matplotlib" thì nó báo "E: Không thể định vị gói matplotlib" thì phải làm thế nào? Tôi mới để linux nên pls giúp đỡ
nishanth anand

Tôi không nhớ chính xác tên của gói (và có RPi của tôi ở nhà), nhưng bạn có thể tìm ra bằng cách phát hành sudo apt-cache search matplotlib. Điều này sẽ cung cấp cho bạn tên chính xác.
Andrey Sobolev

Bạn đã thử tìm kiếm apt-cache cho matplotlib chưa? Có vẻ như tên phù hợp cho gói là python-matpolotlib.
Andrey Sobolev

Xin chào, phương pháp swapfile hoạt động với tôi với Pi 2 và SD 8Gb tiêu chuẩn. Kích thước SD sẽ không tạo ra bất kỳ sự khác biệt nào đối với quy trình, vì chỉ một ít được sử dụng để hoán đổi. Chỉ là một chi tiết, tôi đã chỉnh sửa sudotất cả các lệnh tạo và thao tác hoán đổi trong câu trả lời của Andrey. Tôi đang sử dụng một môi trường ảo như hướng dẫn này: ( pyimagesearch.com/2015/02/23/… ) đã tỏ ra thực sự hữu ích.
Hugh Barnard

6

--no-cache-dirkhông hiệu quả với tôi. Tôi vừa đóng tất cả các ứng dụng và chỉ sau đó tôi mới có thể hoàn tất cài đặ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.