部署后在 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 个属性,包括 clusterstats 包。

另一件事是,如果我继续导入 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 中执行代码

部署网站后在 SharePoint 中禁止 403

Django:添加整数字段后在应用程序上运行 makemigrations 时出现“未知列”

CDH开启kerberos后在第三方机器上部署Spark程序问题解决

迁移后在 Django 上更改 db_table 不起作用,并且添加用户 (AbstractUser) 外键会破坏 __str__()

部署成功后在 /var/app/current 目录下创建文件