Erreur de mémoire lors de l'utilisation de pip install Matplotlib

91

J'utilise Python 2.7, si j'essaie d'installer Matplotlib, j'obtiens cette erreur si j'utilise "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"

Quel pourrait être le problème? J'utilise Raspberry Pi 2 avec une carte SD de 16 Go. J'ai toujours 8 Go de données libres mais j'obtiens toujours cette erreur. Aide aimablement

nishanth anand
la source

Réponses:

295

Cette erreur survient car, semble-t-il, le mécanisme de mise en cache de pip essaie de lire le fichier entier en mémoire avant de le mettre en cache… ce qui pose un problème dans un environnement à mémoire limitée, car matplotlib fait ~ 50 Mo.

Une solution plus simple, jusqu'à ce que pip soit corrigé pour utiliser un algorithme de mise en cache à espace constant, consiste à exécuter pipavec --no-cache-dirpour éviter le cache:

$ pip --no-cache-dir install matplotlib
David Wolever
la source
9
Eu ce problème sur le Raspberry Pi. Résolu!
fdelia
7
Il y avait également ce problème sur Raspberry Pi 2A et cela l'a résolu!
8one6
2
J'ai résolu mon problème dans ma boîte vagabonde, même si je ne comprends pas pourquoi ma boîte vagabonde fonctionne avec une mémoire aussi limitée
johnklawlor
1
Rencontré le même problème sur un Raspberry Pi 3B + et résolu en utilisant les instructions ci-dessus.
Charles Poon
1
J'ai rencontré ce problème lors de l'installation de matplotlib sur un BeagleBone Black. Cette solution l'a corrigé. Merci!
David Stein du
31

Il semble que vous n'ayez pas assez de RAM pour créer matplotlib à partir de rien. Pour surmonter cela, activez le swap:

# 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, si raspbian est installé sur votre carte SD, vous pouvez installer matplotlib à partir du référentiel:

apt-get install python-matplotlib
Andrey Sobolev
la source
Salut, j'ai essayé d'échanger mais j'obtiens toujours la même erreur.
nishanth anand
si je donne "sudo apt-get install matplotlib" il dit "E: Impossible de localiser le paquet matplotlib" que faut-il faire? Je suis nouveau sur Linux, alors
merci de m'aider
Je ne me souviens pas du nom exact du paquet (et j'ai mon RPi à la maison), mais vous pouvez le découvrir en émettant sudo apt-cache search matplotlib. Cela devrait vous donner le nom exact.
Andrey Sobolev
Avez-vous essayé de rechercher apt-cache pour matplotlib? Il semble que le bon nom pour le package soit python-matpolotlib.
Andrey Sobolev
Salut, la méthode swapfile a fonctionné pour moi avec un Pi 2 et une SD standard de 8 Go. La taille SD ne devrait pas faire de différence dans la procédure, car seule une petite quantité est utilisée pour le swap. Juste un détail, j'ai sudoédité toutes les commandes de création et de manipulation de swap dans la réponse d'Andrey. J'utilise un environnement virtuel comme guide: ( pyimagesearch.com/2015/02/23/… ) qui s'est avéré vraiment utile.
Hugh Barnard
6

--no-cache-dirn'a pas fonctionné pour moi. Je viens de fermer toutes les applications et ce n'est qu'alors que j'ai pu terminer l'installation.

MrKsn
la source