使用pip安装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"

可能是什么问题?我正在将树莓派2与16gb SD卡一起使用。我仍然有8gb的可用数据,但仍然收到此错误。请帮助

Answers:


295

出现此错误的原因是,似乎pip的缓存机制正在尝试在将整个文件缓存之前将其读取到内存中……这在有限的内存环境中造成了问题,因为matplotlib约为50mb。

一个简单的办法,直到PIP进行了修补,使用恒定的空间缓存算法,是运行pip--no-cache-dir避免缓存:

$ pip --no-cache-dir install matplotlib

9
在Raspberry Pi上出现了此问题。解决了!
fdelia '16

7
在Raspberry Pi 2A上也有此问题,此问题已解决!
8one6

2
解决了我在无业游民箱中的问题,尽管我不明白为什么我的无业游民箱运行时内存如此有限
johnklawlor

1
在Raspberry Pi 3B +上遇到了相同的问题,并使用上述说明解决了。
查尔斯·潘

1
在BeagleBone Black上安装matplotlib时遇到此问题。此解决方案将其修复。谢谢!
David Stein

31

看来您没有足够的RAM从头开始构建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

嗨,我尝试了交换,但仍然出现相同的错误。
nishanth anand 2015年

如果我给“ sudo apt-get install matplotlib”,它说“ E:无法找到软件包matplotlib”应该怎么办?我是Linux新手,请帮忙
nishanth anand 2015年

我不记得该软件包的确切名称(也没有将我的RPi放在家里),但是您可以通过发出来找到它sudo apt-cache search matplotlib。这应该给您确切的名称。
安德烈·索博列夫

您是否尝试在apt-cache中搜索matplotlib?似乎该包装的正确名称是python-matpolotlib
安德烈·索博列夫

嗨,swapfile方法适用于Pi 2和标准8Gb SD。SD大小不会对过程造成任何影响,因为交换只使用了很少的空间。只是一个细节,我sudo编辑了安德烈答案中的所有交换创建和操作命令。我正在使用虚拟环境作为本指南:(pyimagesearch.com/2015/02/23/…),事实证明这很有帮助。
休·巴纳德

6

--no-cache-dir没有为我工作。我刚刚关闭了所有应用程序,然后才能够完成安装。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.