matplotlib mất thời gian khi được nhập


103

Tôi vừa nâng cấp lên phiên bản ổn định mới nhất của matplotlib(1.5.1) và mỗi khi nhập matplotlib, tôi nhận được thông báo này:

/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.')

... luôn dừng lại trong vài giây.

Đây có phải là hành vi được mong đợi? Trước đây cũng vậy, nhưng không có tin nhắn in?


32
có liên quan: github.com/matplotlib/matplotlib/pull/5640 . Đề xuất ở đó là xóa nội dung của ~/.cache/matplotlibvà thử lại. Nó có thể là một vấn đề cho phép - Không nên xây dựng bộ nhớ cache mỗi khi
tmdavison

Tôi đã không đọc những bình luận mới nhất. Cảm ơn!
Ricky Robinson,

7
Điều này đã làm việc cho tôi. Trên Ubuntu 14.04.2 với python 2.7, tôi đã xóa tất cả các tệp trong ~ / .cache / matplotlib /. Lúc đầu tôi nghĩ rằng nó không hoạt động vì tôi đã nhận được cảnh báo sau đó. Nhưng sau khi các tệp bộ đệm được tạo lại, cảnh báo đã biến mất. :)
Nancy Poekert

Trong tổ hợp mod_wsgi + apache httpd + centos - khi một yêu cầu được gửi từ trình duyệt, httpd chỉ đợi nói rằng bộ đệm phông chữ đang được tạo .... Nó đợi hơn 6 phút và cứ tiếp tục .... và không bao giờ hoàn thành cập nhật phông chữ. Bạn có thể vui lòng đề nghị làm thế nào để giải quyết điều này? Cảm ơn
Vinodh

Câu trả lời:


116

Như tom đã đề xuất trong nhận xét ở trên, việc xóa các tệp:

fontList.cache
fontList.py3k.cache 
tex.cache 

giải quyết vấn đề. Trong trường hợp của tôi, các tệp nằm trong:

`~/.matplotlib`

ĐÃ CHỈNH SỬA

Một vài ngày trước, thông báo lại xuất hiện, tôi đã xóa các tệp ở các vị trí được đề cập ở trên mà không thành công. Tôi thấy rằng như được đề xuất ở đây bởi T Mudau, có một vị trí bổ sung với các tệp bộ đệm văn bản là:~/.cache/fontconfig


6
Tôi đang sử dụng OSX El Capitan và điều này không giải quyết được sự cố. Có suy nghĩ gì không?
mar tin

2
Trên El Capitan, tôi cũng phải xóa ~ / .cache / fontList hoặc tương tự.
Đậu phộng_butter

29
mpl.get_cachedir()sẽ hiển thị tài liệu
Lenna

2
Tôi đang sử dụng OS X El Capitan và điều này giải quyết được sự cố.
nos

6
Lưu ý rằng sau khi xóa các tệp này, bạn sẽ vẫn nhận được cảnh báo một lần nữa - lần tiếp theo khi bạn nhập matplotlib. Sau đó, bạn đã thiết lập.
ohruunuruus

25

Đã xác nhận phương pháp của Hugo hoạt động cho Ubuntu 14.04 LTS / matplotlib 1.5.1:

  • đã xóa ~ / .cache / matplotlib / fontList.cache
  • đã chạy mã, một lần nữa cảnh báo lại được đưa ra (giả định: đang xây dựng lại bộ đệm chính xác)
  • đã chạy lại mã, không có cảnh báo nào nữa (cuối cùng)

12

Trên OSX Yosemite (phiên bản 10.10.15), những điều sau phù hợp với tôi:

  • cũng xóa các tệp bộ nhớ cache khỏi thư mục này: ~ / .cache / fontconfig (theo gợi ý của tom)
    rm -rvf ~/.cache/fontconfig/*
  • cũng đã xóa các tệp .cache trong ~ / .matplotlib (theo gợi ý của Hugo)
    rm -rvf ~/.matplotlib/*

Đã làm việc cho tôi trên macOS X El Captain. Tôi có ấn tượng rằng nó cũng giúp tải các thư viện khác nhanh hơn.
SeF

hoạt động trên macOS 10.12. Ở lần tải thứ 2, không nhận được thông báo nữa.
Demis

9

Tôi đã chạy mã python bằng sudo chỉ một lần và nó đã giải quyết được cảnh báo cho tôi. Bây giờ nó chạy nhanh hơn. Chạy mà không có sudo không đưa ra cảnh báo nào cả.

Chúc mừng


Chào mừng bạn đến với Stack Overflow! Mặc dù về mặt lý thuyết, điều này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo.
Enamul Hassan

Tôi đang chạy sổ ghi chép Jupyter trên Mac OSX El Capitan. sudo jupyter notebookSau đó tôi chạy import matplotlib.pyplottrong một cuốn sổ và nó đã giải quyết được vấn đề của tôi.
kungphil

Tôi đã vật lộn với điều này trong nhiều tháng và điều này đã giải quyết được nó! Tôi đang sử dụng hệ điều hành 10.9.5.
Tactopoda

1
Chà, nếu bạn xem câu trả lời được chấp nhận, bạn sẽ thấy tất cả những gì bạn đã làm là bạn đã giải quyết được vấn đề bằng cách thay đổi người dùng và vì không có ~ / .matplotlib trong thư mục gốc vấn đề biến mất.
Rsh

@Rsh. Dù sao, điều này đã không làm việc cho tôi.
sudo

3

Tôi đã chạy mã python w. sudo và nó đã chữa khỏi nó ... tôi đoán là không được phép viết bảng đó ... chúc may mắn!


0

Xin chào, bạn phải tìm tệp này: font_manager.py trong trường hợp của tôi: C: \ Users \ gustavo \ Anaconda3 \ Lib \ site-Package \ matplotlib \ font_manager.py

và TÌM def win32InstalledFonts (directory = None, fontext = 'ttf') và thay thế bằng:

def win32InstalledFonts (directory = None, fontext = 'ttf'): "" "Tìm kiếm phông chữ trong thư mục phông chữ được chỉ định hoặc sử dụng thư mục hệ thống nếu không có. Danh sách tên tệp phông chữ TrueType được trả về theo mặc định hoặc phông chữ AFM nếu 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

Điều này đã làm việc cho tôi trên Ubuntu 16.04 LST với Python 3.5.2 | Anaconda 4.2.0 (64-bit) . Tôi đã xóa tất cả các tệp trong ~/.cache/matplotlib/.

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

Lúc đầu, tôi nghĩ rằng nó sẽ không hoạt động, vì tôi đã nhận được cảnh báo sau đó. Nhưng sau khi các tệp bộ đệm được tạo lại, cảnh báo đã biến mất. Vì vậy, hãy đóng tệp của bạn và mở lại (mở lại), nó không có cảnh báo.


-1

Điều này đã làm việc cho tôi:

sudo apt-get install libfreetype6-dev libxft-dev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.