Использование scipy.stats.stats в django после развертывания
Я нахожусь в процессе создания django-powered (1.3) интерфейса для пакета, который сильно зависит от scipy.stats.stats (scipy версия 0.9.0), называемого ovl
, На ранних этапах разработки, используя собственный сервер разработки djangos, это не было проблемой. После развертывания с использованием apache debian/2.2.9 и mod_wsgi 3.3 это вызывает серьезную проблему.
Какой бы вид я ни пытался загрузить в браузер, он начинает загружаться и продолжает делать это в течение добрых 5 минут (до истечения времени ожидания), и появляется страница 500. Просто импорт scipy работает, но не делает scipy.stats.stats или даже scipy.stats доступными. Это не удивительно; в документации в init.py Сципи указано, что подпакет stats
должен быть импортирован явно. Тем не менее, то же самое сказано о подпакете cluster
, который импортирует в django (из Интернета и в django-shell) без каких-либо проблем и действительно отображается в dir(scipy)
, чего нет в ipython(0.10.2)-сессии, где он просто не появляется, как я и ожидал.
По команде dir(scipy)
; он возвращает разные результаты при поступлении из Интернета (список из 568 строк, включая подпакет cluster
) в обычной оболочке ipython (564 строки, без подпакета cluster
) и сюрприз, сюрприз, в оболочке Джанго. В оболочке django scipy имеет 570 атрибутов, включая оба cluster
а также stats
пакеты.
Другое дело, если я продолжу импортировать ovl
-package, сохраняя импорт scipy.stats на некотором расстоянии (не в одном из файлов самого приложения), иногда я получаю ошибку ViewDoesNotExist, утверждающую, что в модуле views отсутствует индекс метода, хотя он явно один. Что напоминает мне об этом.
Так что теперь я думаю об этих довольно уродливых решениях:
- Отредактировав init scipy для импорта пакета статистики, чтобы он выглядел "нормально" в dir(scipy) и был доступен через scipy.stats, и я могу использовать старый код.
- Выхватывает подпакет stat для scipy и делает из него обычный пакет (возможно, используя символическую ссылку)
Однако я неохотно применяю эти решения. Кластер фактов обнаруживается в scipy в среде django, меня немного беспокоит. Я подумал, может быть, это как-то связано с тем, чтобы быть пользователем www-данных при входе в сеть, но я не знаю, как это проверить.
Кто-нибудь еще сталкивался с этим? Части этого? Или в противном случае полезные мысли?
Да, и еще одно развертывание Django работает.
2 ответа
mod_python пытался использовать несколько интерпретаторов Python в одном процессе. mod_wsgi может делать то же самое. Хотя это часто работает нормально, некоторые модули расширения не поддерживают это. scipy.stats, вероятно, импортирует такой модуль расширения. У нас были похожие сообщения в списке рассылки scipy, касающиеся scipy.stats в mod_python. Просмотрите документацию mod_wsgi, чтобы узнать, можете ли вы настроить ее так, чтобы она не использовала несколько интерпретаторов в одном процессе, или найти другую стратегию развертывания, в которой для приложения используется один интерпретатор на процесс.
Я также сталкиваюсь с этой проблемой, когда использую scipy.stats в своем приложении django. В среде django manage.py runsever мое приложение выполняется без проблем. Но когда я развертываю приложение на сервере Apache с mod_python, я не могу войти в свое приложение, и браузер продолжает загружаться до истечения времени ожидания. После удаления всех импортированных операторов scipy.stats в моем приложении проблема решается, и я могу выполнить свое приложение на сервере apache.