如何修复石墨中的daemonize导入错误?

时间:2014-06-24 08:38:17

标签: python twisted graphite python-daemon

我正在配置石墨监控系统。在关注https://gist.github.com/surjikal/2777886上的教程时,我遇到了以下导入错误:

python /opt/graphite/bin/carbon-cache.py start

Traceback (most recent call last):
  File "/opt/graphite/bin/carbon-cache.py", line 28, in <module>
    from carbon.util import run_twistd_plugin
  File "/opt/graphite/lib/carbon/util.py", line 21, in <module>
    from twisted.scripts._twistd_unix import daemonize
ImportError: cannot import name daemonize

谷歌搜索我发现了几个可能的解决方案:

1)从daemonize 中删除/opt/graphite/lib/carbon/util.py次导入 (https://answers.launchpad.net/graphite/+question/239063):

from time import sleep, time
from twisted.python.util import initgroups
from twisted.scripts.twistd import runApp
# from twisted.scripts._twistd_unix import daemonize
# daemonize = daemonize # Backwards compatibility

2)使用Twisted 13.1.0而不是更高的扭曲版本。

3)通过点播安装daemonize并直接导入https://www.digitalocean.com/community/tutorials/installing-and-configuring-graphite-and-statsd-on-an-ubuntu-12-04-vps):

# from twisted.scripts._twistd_unix import daemonize
import daemonize

针对扭曲环境解决此导入问题的最稳定且经过验证的解决方案是什么?

2 个答案:

答案 0 :(得分:3)

选项(2)听起来对我来说是最好的选择 - 特别是如果你能从Graphite团队找到一些关于Twisted 13.1的文档是Twisted的支持版本(他们应该记录支持的版本他们的依赖)。

使用选项(1),您可以将安装与上游分开。这最终会成为管理员头痛的问题。

我很确定选项(3)无济于事。 daemonize模块只是相关的,因为它具有相同的名称,并且含糊不清。不过,这不是替代品。

答案 1 :(得分:1)

FWIW,选项(2)和(3)在我独立尝试时都适用于我。

对于(2),我跑了:

pip install --user 'Twisted==13.1.0'

(2)当然看起来比(1)和(3)更强大,所以如果可以,我会继续这样做。

我之前已经按照我在网络其他地方找到的建议降级到Twisted&lt; 12.0,但这只能与(3)配合使用。