Импорт и запуск matplotlib через CGI

У меня есть некоторые драмы с matplotlib и CGI, несмотря на ночь, потраченную на поиск решений.

Короче говоря, я запускаю Python2.7 с matplotlib через сервер Bluhost. Мне нужен простой скрипт для отображения изображения, но он застревает при импорте matplotlib:

import cgitb, os
cgitb.enable()
import matplotlib

Трассировка дает следующее:

: Нет модуля с именем matplotlib args = ('Нет модуля с именем matplotlib',) message = 'Нет модуля с именем matplotlib'

Любые подсказки? Кажется, что большинство проблем с matplotlib/cgi относятся к спецификации доступной для записи папки HOME, но вставка следующего ничего не дает:

os.environ[ 'HOME' ] = '/tmp/'

Любые идеи или предложения будут очень приветствоваться!

Привет, Хью


person user2877148    schedule 13.10.2013    source источник
comment
Он говорит, что не может найти модуль, вы уверены, что matplotlib установлен и что он находится в пути поиска python?   -  person tacaswell    schedule 14.10.2013
comment
Да, еще одна важная информация: я могу импортировать matplotlib из приглашения Python на сервер и даже запустить скрипт, но, похоже, я не могу выполнить его из браузера...   -  person user2877148    schedule 14.10.2013
comment
Я пытаюсь придумать причину, по которой matplotlib можно найти в режиме «консоли», но не при запуске из браузера. Возможно, мне нужно указать какую-то дополнительную переменную среды....   -  person user2877148    schedule 14.10.2013
comment
Я предполагаю, что сервер работает под другим пользователем и с очень ограниченным набором переменных среды. Людям понадобятся дополнительные сведения о вашем хосте/веб-сервере, чтобы дать какой-либо полезный ответ. Я на 99,999% уверен, что это проблема с конфигурацией веб-сервера, а не с matplotlib.   -  person tacaswell    schedule 14.10.2013
comment
Спасибо за чаевые. Да, похоже, на сервере работает другая версия Python без привязки к пакетам, которые я установил в своей учетной записи. Я попытался использовать sys.path.insert(0,'path/to/site-packages/'). Теперь я могу успешно импортировать matplotlib, но, похоже, в импорте нет наследования, т. е. он импортирует matplotlib, но, например, не распознает matplotlib.pyplot. Если я импортирую matplotlib.pyplot, он выдает ошибки, потому что не может найти другие зависимые пакеты. Есть ли способ принудительно импортировать matplotlib (например) и все, что внутри него?   -  person user2877148    schedule 14.10.2013
comment
Вы должны убедиться, что все необходимые библиотеки также указаны в пути. Имейте в виду, что вы в основном делаете упор на очень преднамеренные меры безопасности. Вы могли бы лучше справиться с этим вопросом на суперпользователе.   -  person tacaswell    schedule 14.10.2013
comment
Итак, кажется, проблема решена. Было две проблемы: 1) пути к пакетам не были должным образом указаны в PYTHONPATH, принадлежащем CGI-версии Python, и 2) CGI запускал другую версию python (p2.6), поэтому были некоторые несовместимость с различными пакетами. Я использовал python2.6 при установке модулей numpy и matplotlib, чтобы убедиться, что они совместимы с p2.6, а затем временно добавил ссылку на расположение пакета, когда я вызываю свой скрипт с помощью CGI. Не идеально, но для начала достаточно. Спасибо за вашу помощь!   -  person user2877148    schedule 15.10.2013
comment
Пожалуйста, опубликуйте этот последний комментарий в качестве ответа и примите его, когда система позволит вам.   -  person tacaswell    schedule 15.10.2013


Ответы (1)


Итак, кажется, проблема решена. Было две проблемы: 1) пути к пакетам не были должным образом указаны в PYTHONPATH, принадлежащем CGI-версии Python, и 2) CGI запускал другую версию python (p2.6), поэтому были некоторые несовместимость с различными пакетами. Я использовал «python2.6» при установке модулей numpy и matplotlib, чтобы убедиться, что они совместимы с p2.6, а затем временно добавил ссылку на расположение пакета, когда я вызываю свой скрипт с помощью CGI. Не идеально, но для начала достаточно. Спасибо за вашу помощь!

person user2877148    schedule 16.10.2013