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

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

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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.