Помилка пам'яті під час використання pip install Matplotlib


91

Я використовую Python 2.7, якщо я намагаюся встановити Matplotlib, я отримую цю помилку, якщо використовую "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"

У чому може бути проблема? Я використовую Raspberry Pi 2 з SD-картою на 16 Гб. Я все ще маю 8 Гб даних, але все ще отримую цю помилку. Прохання допомогти

Відповіді:


295

Ця помилка з’являється, оскільки, схоже, механізм кешування pip намагається прочитати весь файл у пам’яті перед кешуванням…, що створює проблему в середовищі з обмеженою пам’яттю, оскільки matplotlib становить ~ 50 Мб.

Більш просте рішення, поки піп не буде виправлена , щоб використовувати алгоритм кешування з постійною простору, щоб працювати pipз , --no-cache-dirщоб уникнути кеш - пам'яті:

$ pip --no-cache-dir install matplotlib

9
Мав цю проблему на Raspberry Pi. Вирішено!
fdelia

7
Також ця проблема виникла на Raspberry Pi 2A, і це вирішило її!
8one6

2
Вирішив свою проблему в моєму бродяжному ящику, хоча я не розумію, чому мій бродячий ящик працює з такою обмеженою пам’яттю
johnklawlor

1
Виникло те саме питання на Raspberry Pi 3B + і вирішено за допомогою вищевказаних інструкцій.
Charles Poon

1
Виникла проблема з установкою matplotlib на BeagleBone Black. Це рішення це виправило. Дякую!
Девід Штейн,

31

Здається, у вас недостатньо оперативної пам'яті для створення matplotlib з нуля. Щоб подолати це, або увімкніть підкачку:

# 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

Або, якщо на SD-карті встановлено raspbian, ви можете встановити matplotlib із сховища:

apt-get install python-matplotlib

Привіт, я намагався поміняти місцями, але все одно я отримую ту ж помилку.
нішант ананд

якщо я даю "sudo apt-get install matplotlib", там написано "E: Не вдається знайти пакет matplotlib", що слід робити? Я новачок у Linux, тому, будь ласка, допоможіть
nishanth anand

Я не пам’ятаю точної назви пакету (і у мене є RPi вдома), але ви можете дізнатися це, видавши sudo apt-cache search matplotlib. Це має дати вам точну назву.
Андрій Соболєв

Ви пробували шукати apt-cache для matplotlib? Здається, правильна назва пакета - python-matpolotlib.
Андрій Соболєв

Привіт, метод swapfile працював у мене з Pi 2 та стандартною 8 Гб SD. Розмір SD не повинен мати ніякого значення для процедури, оскільки для обміну використовується лише трохи. Лише детально, я sudoвідповів усі команди створення та обміну свопом у відповіді Андрія. Я використовую віртуальне середовище як цей посібник: ( pyimagesearch.com/2015/02/23/… ), який виявився справді корисним.
Х'ю Барнард,

6

--no-cache-dirне працював у мене. Я просто закрив усі програми, і лише тоді я зміг закінчити встановлення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.