2012-03-22 12 views
8

Tôi đang sử dụng máy chủ Linux để thiết lập dự án django. Tôi nhận được lỗi này: "Không thể tạo /var/www/.matplotlib; xem xét việc đặt MPLCONFIGDIR thành thư mục có thể ghi cho dữ liệu cấu hình matplotlib"Đặt Matplotlib MPLCONFIGDIR: xem xét đặt MPLCONFIGDIR thành thư mục ghi cho dữ liệu cấu hình matplotlib

Sau đó, tôi thấy $ MPLCONFIGDIR trống. Vì vậy, tôi đặt nó như sau:

[email protected]:~$ export MPLCONFIGDIR=~/website/graph 
[email protected]:~$ echo $MPLCONFIGDIR 
/home/lab/website/graph 

Đường dẫn này là nơi tôi muốn lưu trữ hình ảnh được tạo bởi Matplotlib. Sau đó, tôi đã đảm bảo rằng thiết lập này trong dòng lệnh python:

>>> import matplotlib 
>>> import os 
>>> os.environ.get('MPLCONFIGDIR') 
'/home/lab/website/graph' 

NHƯNG, trong dự án django được triển khai trong Apache với mod_wsgi, lỗi nêu trên vẫn tồn tại. Tôi đã thêm các dòng dưới đây:

import os 
os.environ['MPLCONFIGDIR'] = "/home/lab/website/graph" 
print(os.environ.get('MPLCONFIGDIR')) 

Nó in "Không"!

Có ai có thể giúp tôi không?

Cảm ơn.

+0

Aha, nếu chỉ tôi biết những gì để tìm kiếm khi tôi có cùng một vấn đề với 'mapplotlib'. Tôi backtracked mã đến điểm mà tôi tìm thấy 'configdir = os.environ.get ('MPLCONFIGDIR')'. Tôi đoán stacktrace ngoại lệ không bao giờ nói với tôi về nó. –

Trả lời

18

Đặt MPLCONFIGDIR trong mã trước khi bạn nhập matplotlib. Đảm bảo thư mục có các quyền để ứng dụng có thể ghi.

import os 
os.environ['MPLCONFIGDIR'] = "/home/lab/website/graph" 
import matplotlib 

Hoặc, bạn có thể đặt nó thành tempfile.

import os  
import tempfile 
os.environ['MPLCONFIGDIR'] = tempfile.mkdtemp() 
import matplotlib 
+0

Cảm ơn @miguel vì đã chỉnh sửa – Esteban

+0

Cảm ơn bạn. Đây cũng là trường hợp của chúng tôi. – mirek

0

mỗi @Esteban tôi làm điều gì đó như thế này trong module hoặc các kịch bản:

import os 

try: 
    import matplotlib 
except: 
    import tempfile 
    import atexit 
    import shutil 

    mpldir = tempfile.mkdtemp() 
    atexit.register(shutil.rmtree, mpldir) # rm directory on succ exit 

    os.environ['MPLCONFIGDIR'] = mpldir 

    import matplotlib 

Bằng cách này, thư mục tạm thời được loại bỏ xuất cảnh.

Các vấn đề liên quan