Наткнулся на это сегодня (с Apache, но, вероятно, это будет точно такая же проблема).Я перенаправил stdout и stderr из сценария, чтобы посмотреть, что происходит, и проблема в том, что matplotlib пытается создать файл:
Traceback (most recent call last):
File "/home/ec2-user/dlea/src/dla.py", line 24, in <module>
import dbm
File "/home/ec2-user/dlea/src/dbm.py", line 7, in <module>
import matplotlib
File "/usr/lib64/python2.6/site-packages/matplotlib/__init__.py", line 709, in <module>
rcParams = rc_params()
File "/usr/lib64/python2.6/site-packages/matplotlib/__init__.py", line 627, in rc_params
fname = matplotlib_fname()
File "/usr/lib64/python2.6/site-packages/matplotlib/__init__.py", line 565, in matplotlib_fname
fname = os.path.join(get_configdir(), 'matplotlibrc')
File "/usr/lib64/python2.6/site-packages/matplotlib/__init__.py", line 240, in wrapper
ret = func(*args, **kwargs)
File "/usr/lib64/python2.6/site-packages/matplotlib/__init__.py", line 439, in _get_configdir
raise RuntimeError("Failed to create %s/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data"%h)
RuntimeError: Failed to create /var/www/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data
Поскольку он запускается как пользователь httpd (Apache), он пытаетсясоздайте файл в / var / www /, который принадлежит пользователю root и недоступен для записи пользователем Apache.
Одно из допустимых решений - это просто установить MPLCONFIGDIR во временный каталог перед импортом matplotlib:
import os
import tempfile
os.environ['MPLCONFIGDIR'] = tempfile.mkdtemp()
import matplotlib
Чтобы отследить проблему, я перенаправил stdout и stderr в какой-то файл журнала, чтобы посмотреть, что происходит:
sys.stdout = open("/var/log/dla_stdout.txt", 'a')
sys.stderr = open("/var/log/dla_stderr.txt", 'a')
На самом деле я получил решение из этого другого вопроса StackOverflow: Настройка Matplotlib MPLCONFIGDIR: рассмотрите возможность установки MPLCONFIGDIR в доступный для записи каталог для данных конфигурации matplotlib