Использование scipy.stats.stats в django после развертывания - PullRequest
5 голосов
/ 19 октября 2011

Я нахожусь в процессе создания 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. Это не удивительно; в документации scipy init .py указано, что подпакет stats необходимо импортировать явно. Однако то же самое сказано и о подпакете cluster, который импортирует в django (из Интернета и в django-shell) без каких-либо проблем и действительно отображается в dir(scipy), который он не в сессии ipython (0.10.2), где она просто не появляется, как я и ожидал.

По команде dir(scipy); он возвращает разные результаты при поступлении из Интернета (список из 568 строк, включая подпакет cluster) в обычной оболочке ipython (564 строки, без подпакета cluster) и удивление-удивление в оболочке django. В оболочке django scipy имеет 570 атрибутов, включая пакеты cluster и stats.

Другое дело, что если я продолжаю импортировать ovl -пакет, сохраняя импорт scipy.stats на небольшом расстоянии (не в одном из файлов самого приложения), иногда я получаю ошибку ViewDoesNotExist указав, что в модуле представлений нет индекса метода, хотя он явно есть. Что напоминает мне о это .

Так что теперь я думаю об этих довольно уродливых решениях:

  • Редактирование инициализации scipy для импорта пакета статистики таким образом, чтобы он отображался «нормально» в dir (scipy) и был доступен через scipy.stats, и я могу использовать старый код.
  • Выхватывает подпакет stat для scipy и делает из него обычный пакет (возможно, используя символическую ссылку)

Однако я неохотно применяю эти решения. Кластер фактов обнаруживается в scipy в среде django, меня немного беспокоит. Я подумал, может быть, это как-то связано с тем, чтобы быть пользователем www-данных при входе в сеть, но я не знаю, как это проверить.

Кто-нибудь еще сталкивался с этим? Части этого? Или в противном случае полезные мысли?

Да, и еще одно развертывание django работает .

Ответы [ 2 ]

5 голосов
/ 19 октября 2011

mod_python используется для попытки использования нескольких интерпретаторов Python в одном процессе.mod_wsgi может делать то же самое.Хотя это часто работает нормально, некоторые модули расширения не поддерживают это.Вероятно, scipy.stats импортирует такой модуль расширения.У нас были похожие сообщения в списке рассылки scipy, касающиеся scipy.stats в mod_python.Просмотрите документацию mod_wsgi, чтобы узнать, можете ли вы настроить ее так, чтобы она не использовала несколько интерпретаторов в одном процессе, или найдите другую стратегию развертывания, в которой для приложения используется один интерпретатор на процесс.

1 голос
/ 27 марта 2012

Я также сталкиваюсь с этой проблемой, когда использую scipy.stats в своем приложении django.В среде runjver django manage.py мое приложение выполняется без проблем.Но когда я развертываю приложение на сервере Apache с mod_python, я не могу войти в свое приложение, и браузер продолжает загружаться до истечения времени ожидания.После удаления всех импортированных операторов scipy.stats в моем приложении проблема решается, и я могу запустить свое приложение на сервере apache.

...