我正在为一个严重依赖 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)
;来自网络时它返回不同的结果(568 个字符串的列表,包括子包cluster
)在普通的 ipython shell 中(564 个字符串,没有子包cluster
)和惊喜,惊喜,在 django shell 中。在 django shell 中 scipy 有 570 个属性,包括cluster
and stats
包。
另一件事是,如果我继续导入ovl
-package,同时将 scipy.stats 导入保持在一定距离(不在应用程序本身的文件之一中),有时我会收到 ViewDoesNotExist 错误,指出视图模块中没有方法索引,而显然有一。这让我想起this.
所以现在我正在考虑这些相当丑陋的解决方案:
- 编辑 scipy 的 init 以导入 stats 包,以便它“正常”出现在 dir(scipy) 中,并且可以通过 scipy.stats 访问,我可以使用旧代码。
- 抓取 scipy 的 stat 子包并从中创建一个常规包(可能使用符号链接)
然而,我不愿意应用这些解决方案。事实上集群出现在 django 环境中的 scipy 中让我有点担心。我想这可能与从网络登录时成为 www-data 用户有关,但我不知道如何检查。
还有其他人遇到过这个吗?这个的一部分?
或者其他有用的想法?
哦,另一个 django 部署确实可以工作。
mod_python 曾经尝试在同一进程中使用多个Python解释器。 mod_wsgi 可能会做同样的事情。虽然这通常可以正常工作,但某些扩展模块不支持此功能。 scipy.stats 可能正在导入这样的扩展模块。我们在 scipy 邮件列表上也有关于 mod_python 下的 scipy.stats 的类似报告。检查 mod_wsgi 文档,看看是否可以对其进行配置,使其不在同一进程中使用多个解释器,或者找到一种不同的部署策略,为应用程序的每个进程使用一个解释器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)