Erro de memória ao usar pip install Matplotlib

91

Estou usando o Python 2.7, se tento instalar o Matplotlib, recebo este erro se usar "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"

Qual pode ser o problema? Estou usando raspberry Pi 2 com um cartão SD de 16 gb. Ainda tenho 8 GB de dados livres, mas ainda recebo este erro. Gentilmente ajuda

nishanth anand
fonte

Respostas:

297

Este erro está ocorrendo porque, ao que parece, o mecanismo de cache do pip está tentando ler o arquivo inteiro na memória antes de armazená-lo em cache ... o que representa um problema em um ambiente de memória limitada, já que matplotlib tem ~ 50 MB.

Uma solução mais simples, até que o pip seja corrigido para usar um algoritmo de cache de espaço constante, é executar pipcom --no-cache-dirpara evitar o cache:

$ pip --no-cache-dir install matplotlib
David Wolever
fonte
9
Tive esse problema no Raspberry Pi. Resolvido!
fdelia
7
Também tinha esse problema no Raspberry Pi 2A e isso resolveu!
8one6 de
2
Resolvi meu problema na minha caixa vagrant, embora eu não entenda por que minha caixa vagrant está funcionando com memória tão limitada
johnklawlor
1
Encontrou o mesmo problema em um Raspberry Pi 3B + e resolvi usando as instruções acima.
Charles Poon
1
Encontrou este problema ao instalar matplotlib em um BeagleBone Black. Esta solução corrigiu isso. Obrigado!
David Stein
31

Parece que você não tem memória suficiente para construir matplotlib do zero. Para superar isso, ative a troca:

# 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

Ou, se você tiver o raspbian instalado em seu cartão SD, você pode instalar matplotlib do repositório:

apt-get install python-matplotlib
Andrey Sobolev
fonte
Oi, eu tentei trocar, mas ainda estou recebendo o mesmo erro.
nishanth an e
se eu der "sudo apt-get install matplotlib" ele diz "E: Não foi possível localizar o pacote matplotlib" o que deve ser feito? Eu sou novo no Linux, então por
favor me
Não me lembro o nome exato da embalagem (e tenho meu RPi em casa), mas dá para saber pelo emissor sudo apt-cache search matplotlib. Isso deve fornecer o nome exato.
Andrey Sobolev,
Você já tentou pesquisar no apt-cache por matplotlib? Parece que o nome certo para o pacote é python-matpolotlib.
Andrey Sobolev
Oi, o método swapfile funcionou para mim com um Pi 2 e um SD de 8 Gb padrão. O tamanho do SD não deve fazer nenhuma diferença no procedimento, já que apenas um pouco é usado para troca. Apenas um detalhe, sudoeditei todos os comandos de criação e manipulação de swap na resposta de Andrey. Estou usando um ambiente virtual como guia: ( pyimagesearch.com/2015/02/23/… ) que se provou realmente útil.
Hugh Barnard
6

--no-cache-dirnão funcionou para mim. Acabei de fechar todos os aplicativos e só então consegui terminar a instalação.

MrKsn
fonte