Error de memoria al usar pip install Matplotlib

91

Estoy usando Python 2.7, si intento instalar Matplotlib, aparece este error si 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"

Cual podria ser el problema? Estoy usando Raspberry Pi 2 con una tarjeta SD de 16 GB. Todavía tengo 8 GB de datos libres, pero sigo recibiendo este error. Amablemente ayuda

nishanth anand
fuente

Respuestas:

295

Este error aparece porque, al parecer, el mecanismo de almacenamiento en caché de pip está tratando de leer todo el archivo en la memoria antes de almacenarlo en caché ... lo que plantea un problema en un entorno de memoria limitada, ya que matplotlib es ~ 50 MB.

Una solución más simple, hasta el PIP está parcheado para utilizar un algoritmo de caché constante en el espacio, es correr pipcon --no-cache-direvitar la caché:

$ pip --no-cache-dir install matplotlib
David Wolever
fuente
9
Tuve este problema en la Raspberry Pi. ¡Resuelto!
fdelia
7
¡También tuve este problema en Raspberry Pi 2A y esto lo resolvió!
8one6
2
Resuelto mi problema en mi cuadro de vagabundo, aunque yo no entiendo por qué mi caja vagabundo se está ejecutando con tan poca memoria
johnklawlor
1
Encontré el mismo problema en una Raspberry Pi 3B + y se resolvió usando las instrucciones anteriores.
Charles Poon
1
Encontré este problema al instalar matplotlib en un BeagleBone Black. Esta solución lo solucionó. ¡Gracias!
David Stein
31

Parece que no tiene suficiente RAM para construir matplotlib desde cero. Para superar eso, active el intercambio:

# 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

O, si tiene raspbian instalado en su tarjeta SD, puede instalar matplotlib desde el repositorio:

apt-get install python-matplotlib
Andrey Sobolev
fuente
Hola, intenté cambiar, pero sigo recibiendo el mismo error.
nishanth y
si doy "sudo apt-get install matplotlib", dice "E: No se puede localizar el paquete matplotlib", ¿qué se debe hacer? Soy nuevo en Linux, así que por favor
ayúdenme
No recuerdo el nombre exacto del paquete (y tengo mi RPi en casa), pero puedes averiguarlo emitiendo sudo apt-cache search matplotlib. Esto debería darle el nombre exacto.
Andrey Sobolev
¿Ha intentado buscar apt-cache para matplotlib? Parece que el nombre correcto para el paquete es python-matpolotlib.
Andrey Sobolev
Hola, el método de archivo de intercambio me funcionó con un Pi 2 y una SD estándar de 8 Gb. El tamaño de la SD no debería influir en el procedimiento, ya que solo se usa un poco para el intercambio. Solo un detalle, sudoedité todos los comandos de creación y manipulación de intercambio en la respuesta de Andrey. Estoy usando un entorno virtual como esta guía: ( pyimagesearch.com/2015/02/23/… ) que ha resultado realmente útil.
Hugh Barnard
6

--no-cache-dirno funcionó para mí. Acabo de cerrar todas las aplicaciones y solo entonces pude terminar la instalación.

MrKsn
fuente