matplotlib ใช้เวลาในการนำเข้า


103

ฉันเพิ่งอัปเกรดเป็นเวอร์ชันเสถียรล่าสุดของmatplotlib(1.5.1) และทุกครั้งที่ฉันนำเข้า matplotlib ฉันได้รับข้อความนี้:

/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')

... ซึ่งมักจะหยุดนิ่งไม่กี่วินาที

นี่คือพฤติกรรมที่คาดหวังหรือไม่? เมื่อก่อนก็เหมือนกัน แต่ไม่มีข้อความที่พิมพ์ออกมา?


32
ที่เกี่ยวข้อง: github.com/matplotlib/matplotlib/pull/5640 ข้อเสนอแนะคือให้ลบเนื้อหา~/.cache/matplotlibและลองอีกครั้ง อาจเป็นปัญหาการอนุญาต - ไม่ควรสร้างแคชนั้นทุกครั้ง
tmdavison

ฉันไม่ได้อ่านความคิดเห็นล่าสุด ขอบคุณ!
Ricky Robinson

7
สิ่งนี้ได้ผลสำหรับฉัน บน Ubuntu 14.04.2 พร้อม python 2.7 ฉันลบไฟล์ทั้งหมดใน ~ / .cache / matplotlib /. ตอนแรกฉันคิดว่ามันไม่ได้ผลเพราะฉันได้รับคำเตือนในภายหลัง แต่หลังจากสร้างไฟล์แคชขึ้นมาใหม่คำเตือนก็หายไป :)
Nancy Poekert

ในชุดค่าผสม mod_wsgi + apache httpd + centos - เมื่อมีการส่งคำขอจากเบราว์เซอร์ httpd ก็รอว่ากำลังสร้างแคชแบบอักษร .... รอนานกว่า 6 นาทีแล้วดำเนินต่อไป .... และไม่เสร็จสมบูรณ์ การปรับปรุงแบบอักษร คุณช่วยแนะนำวิธีแก้ปัญหานี้ได้ไหม ขอบคุณ
Vinodh

คำตอบ:


116

ตามที่ทอมแนะนำในความคิดเห็นด้านบนการลบไฟล์:

fontList.cache
fontList.py3k.cache 
tex.cache 

แก้ปัญหา. ในกรณีของฉันไฟล์อยู่ภายใต้:

`~/.matplotlib`

แก้ไข

สองสามวันที่ผ่านมาข้อความดังกล่าวปรากฏขึ้นอีกครั้งฉันลบไฟล์ในตำแหน่งที่กล่าวถึงข้างต้นโดยไม่ประสบความสำเร็จ ฉันพบว่าเป็นข้อเสนอแนะที่นี่โดยT Mudauมีสถานที่พิเศษกับไฟล์แคชข้อความ:~/.cache/fontconfig


6
ฉันใช้ OSX El Capitan และไม่สามารถแก้ปัญหาได้ ความคิดใด ๆ ?
มี.ค.

2
ใน El Capitan ฉันต้องลบ ~ / .cache / fontList หรือคล้ายกัน
Peanut_butter

29
mpl.get_cachedir()จะแสดงเอกสาร
Lenna

2
ฉันใช้ OS X El Capitan และวิธีนี้ช่วยแก้ปัญหาได้
เลขที่

6
โปรดทราบว่าหลังจากลบไฟล์เหล่านี้แล้วคุณจะยังคงได้รับคำเตือนอีกครั้ง - ในครั้งถัดไปที่คุณนำเข้า matplotlib หลังจากนั้นคุณก็พร้อม
ohruunuruus

25

แนวทางของ Hugo ที่ยืนยันแล้วใช้ได้กับ Ubuntu 14.04 LTS / matplotlib 1.5.1:

  • ลบแล้ว ~ / .cache / matplotlib / fontList.cache
  • รันโค้ดอีกครั้งมีการแจ้งเตือน (สมมติฐาน: กำลังสร้างแคชใหม่อย่างถูกต้อง)
  • รันโค้ดอีกครั้งไม่มีคำเตือนอีกต่อไป (ในที่สุด)

12

บน OSX Yosemite (เวอร์ชัน 10.10.15) สิ่งต่อไปนี้ใช้ได้ผลสำหรับฉัน:

  • ลบไฟล์แคชออกจากไดเร็กทอรีนี้ด้วย: ~ / .cache / fontconfig (ตามคำแนะนำของทอม)
    rm -rvf ~/.cache/fontconfig/*
  • ยังลบไฟล์. แคชใน ~ / .matplotlib (ตามคำแนะนำของ Hugo)
    rm -rvf ~/.matplotlib/*

ทำงานให้ฉันบน macOS X El Captain ฉันรู้สึกว่ามันทำให้โหลดไลบรารีอื่นได้เร็วขึ้นเช่นกัน
SeF

ทำงานบน macOS 10.12 ในการโหลดครั้งที่ 2 ไม่ได้รับข้อความอีกต่อไป
Demis

9

ฉันรันโค้ด python โดยใช้ sudo เพียงครั้งเดียวและแก้ไขคำเตือนให้ฉัน ตอนนี้วิ่งเร็วขึ้น การทำงานโดยไม่มี sudo จะไม่มีการเตือนใด ๆ เลย

ไชโย


ยินดีต้อนรับสู่ Stack Overflow! ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีแต่ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์สำหรับการอ้างอิง
Enamul Hassan

ฉันใช้สมุดบันทึก Jupyter บน Mac OSX El Capitan ฉันวิ่งsudo jupyter notebookแล้วimport matplotlib.pyplotในสมุดบันทึกและจะแก้ปัญหาของฉัน
kungphil

ฉันดิ้นรนกับเรื่องนี้มาหลายเดือนแล้วและมันก็แก้ไขได้! ฉันใช้ OS 10.9.5
Tactopoda

1
ถ้าคุณดูคำตอบที่ยอมรับคุณจะเห็นสิ่งที่คุณทำคือคุณได้แก้ไขปัญหาโดยการเปลี่ยนผู้ใช้และเนื่องจากไม่มี ~ / .matplotlib ในปัญหาไดเรกทอรีหลักของรากจึงหายไป
Rsh

@Rsh ไม่คำตอบที่บอกว่าจะใช้สิทธิ์รูทบอกว่าการรันครั้งเดียวเมื่อรูททำให้มันไม่สร้างแคชอีกถ้าคุณเรียกใช้ในฐานะผู้ใช้ปกติหลังจากนั้น อย่างไรก็ตามนี่ไม่ได้ผลสำหรับฉัน
sudo

3

ฉันรันโค้ด python w sudo และมันหาย ... ฉันเดาว่าไม่มีสิทธิ์เขียนตารางนั้น ... โชคดี!


0

สวัสดีคุณต้องพบไฟล์นี้: font_manager.py ในกรณีของฉัน: C: \ Users \ gustavo \ Anaconda3 \ Lib \ site-Packages \ matplotlib \ font_manager.py

และค้นหา def win32InstalledFonts (directory = None, fontext = 'ttf') และแทนที่โดย:

def win32InstalledFonts (ไดเร็กทอรี = ไม่มี, fontext = 'ttf'): "" "ค้นหาฟอนต์ในไดเร็กทอรีฟอนต์ที่ระบุหรือใช้ไดเร็กทอรีระบบหากไม่มีการระบุรายการชื่อไฟล์ฟอนต์ TrueType จะถูกส่งคืนตามค่าเริ่มต้นหรือฟอนต์ AFM หากfontext == 'afm'. "" "

from six.moves import winreg
if directory is None:
    directory = win32FontDirectory()

fontext = get_fontext_synonyms(fontext)

key, items = None, {}
for fontdir in MSFontDirectories:
    try:
        local = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, fontdir)
    except OSError:
        continue

    if not local:
        return list_fonts(directory, fontext)
    try:
        for j in range(winreg.QueryInfoKey(local)[1]):
            try:
                key, direc, any = winreg.EnumValue(local, j)
                if not is_string_like(direc):
                    continue
                if not os.path.dirname(direc):
                    direc = os.path.join(directory, direc)
                    direc = direc.split('\0', 1)[0]

                if os.path.splitext(direc)[1][1:] in fontext:
                    items[direc] = 1
            except EnvironmentError:
                continue
            except WindowsError:
                continue
            except MemoryError:
                continue
        return list(six.iterkeys(items))
    finally:
        winreg.CloseKey(local)
return None

0

สิ่งนี้ใช้ได้กับฉันบน Ubuntu 16.04 LSTพร้อมPython 3.5.2 | งู 4.2.0 (64 บิต) ฉันลบไฟล์ทั้งหมดใน~/.cache/matplotlib/.

sudo rm -r fontList.py3k.cache tex.cache 

ตอนแรกฉันคิดว่ามันจะไม่ทำงานเพราะฉันได้รับคำเตือนในภายหลัง แต่หลังจากสร้างไฟล์แคชขึ้นมาใหม่คำเตือนก็หายไป ดังนั้นปิดไฟล์ของคุณและเปิดใหม่อีกครั้ง (เปิดอีกครั้ง) ไม่มีคำเตือน


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