2

I am configuring a graphite monitoring system. When following the tutorial on https://gist.github.com/surjikal/2777886 I ran into the following import error:

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

Googling around I found several possible solutions for this issue:

1) Remove the daemonize imports from /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) Use Twisted 13.1.0 instead of a higher twisted version.

3) Install daemonize via pip and import it directly (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

What is the most stable and proven solution for a twisted environment to fix this import issue?

4

2 回答 2

3

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

使用选项 (1),您将安装与上游不同。这最终将成为管理员头疼的问题。

我很确定选项(3)不会有帮助。该daemonize模块的相关性仅在于它具有相同的名称并且模糊地执行相同的操作。不过,它不是直接替代品。

于 2014-06-24T12:16:42.207 回答
1

FWIW,选项 (2) 和 (3) 当我彼此独立地尝试它们时,它们都对我有用。

对于(2),我跑了:

pip install --user 'Twisted==13.1.0'

(2)当然看起来比(1)和(3)更强大,所以如果可以的话,我会同意的。

我之前曾按照我在网上其他地方找到的建议降级到 Twisted<12.0,但这只能与 (3) 一起使用。

于 2014-12-23T00:31:35.757 回答