部署后在 django 中使用 scipy.stats.stats
Posted
技术标签:
【中文标题】部署后在 django 中使用 scipy.stats.stats【英文标题】:Using scipy.stats.stats in django after deployment 【发布时间】:2011-12-10 19:11:47 【问题描述】:我正在为一个严重依赖于 scipy.stats.stats(scipy 版本 0.9.0)的包创建一个由 django 驱动的(1.3)接口,名为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)
;它在来自普通 ipython shell(564 个字符串,没有子包 cluster
)和 django shell 中的网络(568 个字符串的列表,包括子包cluster
)时返回不同的结果。在 django shell 中,scipy 有 570 个属性,包括 cluster
和 stats
包。
另一件事是,如果我继续导入 ovl
-package,同时将 scipy.stats 导入保持一定距离(不在应用程序本身的文件中),有时我会收到 ViewDoesNotExist 错误说明视图模块中没有方法索引,而显然有一个。这让我想起了this。
所以现在我正在考虑这些相当丑陋的解决方案:
编辑 scipy 的 init 以导入 stats 包,使其在 dir(scipy) 中“正常”显示,并可通过 scipy.stats 访问,我可以使用旧代码。 抓取 scipy 的 stat 子包并从中制作一个常规包(可能使用符号链接)但是,我不愿意应用这些解决方案。事实集群在 django 环境中出现在 scipy 中让我有点担心。我想这可能与从网络登录时成为 www-data 用户有关,但我不知道如何检查。
有没有其他人遇到过这种情况?这其中的一部分? 或者其他有用的想法?
哦,另一个 django 部署确实工作。
【问题讨论】:
【参考方案1】:我在 django 应用程序中使用 scipy.stats 时也遇到了这个问题。 在 django manage.py runsever 环境中,我的应用程序正确执行,没有任何问题。但是当我使用 mod_python 将应用程序部署到 apache 服务器时,我无法进入我的应用程序,并且浏览器会一直加载直到超时。在我的应用程序中删除所有导入的 scipy.stats 语句后,问题就解决了,我可以在 apache 服务器中执行我的应用程序。
【讨论】:
【参考方案2】:mod_python 曾经尝试在同一进程中使用多个 Python 解释器。 mod_wsgi 可能也在做同样的事情。虽然这通常可以正常工作,但某些扩展模块不支持此功能。 scipy.stats 可能正在导入这样的扩展模块。我们在 mod_python 下关于 scipy.stats 的 scipy 邮件列表上有类似的报告。查看 mod_wsgi 文档,看看您是否可以对其进行配置,使其不在同一进程中使用多个解释器,或者找到一种不同的部署策略,为应用程序每个进程使用一个解释器。
【讨论】:
使用这个答案,我用谷歌搜索并找到了this question,并通过它找到了解决方案和explanation。通过将<Directory /usr/local/www/wsgi-scripts> WSGIApplicationGroup %GLOBAL Order allow,deny Allow from all </Directory>
放入我的httpd.conf 解决了这个问题。第二行是关于子解释器的行。以上是关于部署后在 django 中使用 scipy.stats.stats的主要内容,如果未能解决你的问题,请参考以下文章
Django:添加整数字段后在应用程序上运行 makemigrations 时出现“未知列”
CDH开启kerberos后在第三方机器上部署Spark程序问题解决
迁移后在 Django 上更改 db_table 不起作用,并且添加用户 (AbstractUser) 外键会破坏 __str__()