Kesalahan memori saat menggunakan pip install Matplotlib

91

Saya menggunakan Python 2.7, Jika saya mencoba menginstal Matplotlib, saya mendapatkan error ini jika menggunakan "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"

Apa masalahnya? Saya menggunakan raspberry Pi 2 dengan kartu SD 16gb. Saya masih memiliki data 8gb gratis tetapi masih mendapatkan kesalahan ini. Mohon bantuannya

nishanth anand
sumber

Jawaban:

295

Kesalahan ini muncul karena, tampaknya, mekanisme cache pip mencoba membaca seluruh file ke dalam memori sebelum menyimpannya ... yang menimbulkan masalah di lingkungan memori terbatas, karena matplotlib ~ 50mb.

Sebuah solusi sederhana, sampai pip ditambal dengan menggunakan algoritma caching konstan-ruang, adalah dengan menjalankan pipdengan --no-cache-dirmenghindari cache:

$ pip --no-cache-dir install matplotlib
David Wolever
sumber
9
Punya masalah ini di Raspberry Pi. Terpecahkan!
fdelia
7
Juga memiliki masalah ini di Raspberry Pi 2A dan ini menyelesaikannya!
8one6
2
Memecahkan masalah saya di kotak gelandangan saya, meskipun saya tidak mengerti mengapa kotak gelandangan saya berjalan dengan memori terbatas
johnklawlor
1
Mengalami masalah yang sama pada Raspberry Pi 3B + dan diselesaikan menggunakan petunjuk di atas.
Charles Poon
1
Mengalami masalah ini saat memasang matplotlib pada BeagleBone Black. Solusi ini memperbaikinya. Terima kasih!
David Stein
31

Sepertinya Anda memiliki RAM yang tidak cukup untuk membuat matplotlib dari awal. Untuk mengatasinya, aktifkan swap:

# 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

Atau, jika Anda menginstal raspbian pada kartu SD Anda, Anda dapat menginstal matplotlib dari repositori:

apt-get install python-matplotlib
Andrey Sobolev
sumber
Hai, saya mencoba menukar tetapi saya masih mendapatkan kesalahan yang sama.
Nishanth anand
jika saya memberikan "sudo apt-get install matplotlib" dikatakan "E: Tidak dapat menemukan paket matplotlib" apa yang harus dilakukan? Saya baru mengenal linux jadi tolong bantu
nishanth anand
Saya tidak ingat nama persis paketnya (dan memiliki RPi saya di rumah), tetapi Anda dapat menemukannya dengan menerbitkannya sudo apt-cache search matplotlib. Ini akan memberi Anda nama yang tepat.
Andrey Sobolev
Sudahkah Anda mencoba mencari apt-cache untuk matplotlib? Tampaknya nama yang tepat untuk paket tersebut adalah python-matpolotlib.
Andrey Sobolev
Hai, metode swapfile bekerja untuk saya dengan Pi 2, dan SD 8Gb standar. Ukuran SD seharusnya tidak membuat perbedaan pada prosedur, karena hanya sedikit yang digunakan untuk swap. Sedikit detail, saya sudomengedit semua perintah pembuatan dan manipulasi swap dalam jawaban Andrey. Saya menggunakan lingkungan virtual sebagai panduan ini: ( pyimagesearch.com/2015/02/23/… ) yang terbukti sangat membantu.
Hugh Barnard
6

--no-cache-dirtidak berhasil untuk saya. Saya baru saja menutup semua aplikasi dan setelah itu saya dapat menyelesaikan instalasi.

MrKsn
sumber