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.