ข้อผิดพลาดของหน่วยความจำขณะใช้ 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"

ปัญหาอาจเกิดจากอะไร? ฉันใช้ราสเบอร์รี่ Pi 2 กับการ์ด SD ขนาด 16GB ฉันยังมีเน็ตฟรี 8gb แต่ยังคงได้รับข้อผิดพลาดนี้ กรุณาช่วย

คำตอบ:


297

ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากดูเหมือนว่ากลไกการแคชของ pip พยายามอ่านไฟล์ทั้งหมดลงในหน่วยความจำก่อนที่จะแคช…ซึ่งก่อให้เกิดปัญหาในสภาพแวดล้อมหน่วยความจำที่ จำกัด เนื่องจาก matplotlib มีขนาด ~ 50mb

วิธีแก้ปัญหาที่ง่ายกว่าจนกว่า pip จะได้รับการแก้ไขเพื่อใช้อัลกอริทึมการแคชพื้นที่คงที่คือการรัน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 วิธีนี้แก้ไขได้ ขอขอบคุณ!
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

หรือถ้าคุณติดตั้ง raspbian ในการ์ด SD คุณสามารถติดตั้ง matplotlib จากที่เก็บ:

apt-get install python-matplotlib

สวัสดีฉันลองเปลี่ยน แต่ก็ยังได้รับข้อผิดพลาดเดียวกัน
nishanth anand

ถ้าฉันให้ "sudo apt-get install matplotlib" มันขึ้นว่า "E: Unable to locate package matplotlib" ควรทำอย่างไร? ฉันยังใหม่กับ linux ดังนั้นโปรดช่วยด้วย
nishanth anand

ผมจำไม่ได้ชื่อที่แน่นอนของแพคเกจ (และมี RPI ของฉันที่บ้าน) sudo apt-cache search matplotlibแต่คุณสามารถค้นหาได้โดยการออก นี่ควรให้ชื่อที่แน่นอน
Andrey Sobolev

คุณลองค้นหา apt-cache สำหรับ matplotlib แล้วหรือยัง? python-matpolotlibมันดูเหมือนว่าชื่อที่เหมาะสมสำหรับแพคเกจเป็น
Andrey Sobolev

สวัสดีวิธีการ swapfile ใช้ได้กับฉันกับ Pi 2 และมาตรฐาน 8Gb SD ขนาด SD ไม่ควรสร้างความแตกต่างใด ๆ กับขั้นตอนเนื่องจากใช้เพียงเล็กน้อยสำหรับการแลกเปลี่ยน เพียงรายละเอียดฉันsudoแก้ไขคำสั่งการสร้างและการจัดการการแลกเปลี่ยนทั้งหมดในคำตอบของ Andrey ฉันใช้สภาพแวดล้อมเสมือนจริงตามคำแนะนำนี้: ( pyimagesearch.com/2015/02/23/… ) ซึ่งพิสูจน์แล้วว่ามีประโยชน์จริงๆ
Hugh Barnard

6

--no-cache-dirไม่ได้ผลสำหรับฉัน ฉันเพิ่งปิดแอพทั้งหมดจากนั้นฉันก็สามารถติดตั้งให้เสร็จได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.