Errore di memoria durante l'utilizzo di pip install Matplotlib


91

Sto usando Python 2.7, se provo a installare Matplotlib ricevo questo errore se uso "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"

Quale potrebbe essere il problema? Sto usando Raspberry Pi 2 con una scheda SD da 16 GB. Ho ancora 8 GB di dati liberi ma ricevo ancora questo errore. Gentilmente aiuto

Risposte:


297

Questo errore si verifica perché, a quanto pare, il meccanismo di caching di pip sta tentando di leggere l'intero file in memoria prima di memorizzarlo nella cache ... il che pone un problema in un ambiente a memoria limitata, poiché matplotlib è ~ 50mb.

Una soluzione più semplice, fino a quando pip non viene corretto per utilizzare un algoritmo di cache a spazio costante, è eseguire pipcon --no-cache-dirper evitare la cache:

$ pip --no-cache-dir install matplotlib

9
Ho avuto questo problema sul Raspberry Pi. Risolto!
— fdelia

7
Ho anche avuto questo problema su Raspberry Pi 2A e questo lo ha risolto!
— 8one6

2
Ho risolto il mio problema nella mia scatola vagabonda, anche se non capisco perché la mia scatola vagabonda funziona con una memoria così limitata
— johnklawlor

1
Ha riscontrato lo stesso problema su un Raspberry Pi 3B + e risolto utilizzando le istruzioni precedenti.
— Charles Poon

1
È stato riscontrato questo problema durante l'installazione di matplotlib su un BeagleBone Black. Questa soluzione lo ha risolto. Grazie!
— David Stein,

31

Sembra che tu abbia RAM insufficiente per costruire matplotlib da zero. Per ovviare a ciò, attiva lo scambio:

# 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

Oppure, se hai raspbian installato sulla tua scheda SD, puoi installare matplotlib dal repository:

apt-get install python-matplotlib

Ciao, ho provato a scambiare, ma ricevo ancora lo stesso errore.
— nishanth anand

se do "sudo apt-get install matplotlib" dice "E: Impossibile individuare il pacchetto matplotlib" cosa dovrebbe essere fatto? Sono nuovo su Linux quindi pls help
— nishanth e

Non ricordo il nome esatto del pacchetto (e ho il mio RPi a casa), ma puoi scoprirlo rilasciando sudo apt-cache search matplotlib. Questo dovrebbe darti il ​​nome esatto.
— Andrey Sobolev

Hai provato a cercare in apt-cache matplotlib? Sembra che il nome giusto per il pacchetto sia python-matpolotlib.
— Andrey Sobolev

Ciao, il metodo swapfile ha funzionato per me con un Pi 2 e una SD standard da 8 Gb. La dimensione della SD non dovrebbe fare alcuna differenza per la procedura, poiché solo una piccola parte viene utilizzata per lo scambio. Solo un dettaglio, ho sudoinserito tutti i comandi di creazione e manipolazione dello scambio nella risposta di Andrey. Sto usando un ambiente virtuale come questa guida: ( pyimagesearch.com/2015/02/23/… ) che si è rivelato davvero utile.
— Hugh Barnard,

6

--no-cache-dirnon ha funzionato per me. Ho appena chiuso tutte le app e solo allora sono riuscito a completare l'installazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.