【问题标题】:Cannot import markdown because of COMMAND_LINE_LOGGING_LEVEL由于 COMMAND_LINE_LOGGING_LEVEL 无法导入 markdown
【发布时间】:2011-05-15 07:52:42
【问题描述】:

我有一个奇怪的错误,我可以在 Python 中导入 markdown,我可以在 Django 运行服务器中的 python 中导入 markdown,但是当我尝试在 gunicorn 的应用服务器中导入 markdown 时出现以下错误。

* ImportError: cannot import name COMMAND_LINE_LOGGING_LEVEL

这更令人困惑,因为我找到了在 markdown(或我正在使用的任何代码)中引用 COMMAND_LINE_LOGGING_LEVEL 的唯一位置——在 markdown init 中定义它的一行.py,我把它注释掉了。我仍然收到此错误。

有什么想法吗?

【问题讨论】:

    标签: python django markdown


    【解决方案1】:

    Gunicorn,出于我还不明白的原因,将 virtualenv/bin 目录添加到 sys.path 中。 Markdown 将 markdown.py 安装到该 bin 目录中。该 markdown.py 尝试从 markdown 库中导入 COMMAND_LINE_LOGGING_LEVEL。这会导致循环失败。

    我不知道为什么 Gunicorn 会这样做,而且可能不应该这样做。我的方便修复是将以下内容添加到服务器的 local_settings.py

    import sys
    for i, path in enumerate(sys.path):
        if path.endswith('bin'):
            del sys.path[i]
    

    【讨论】:

      【解决方案2】:

      我通过从 what/bin 中的 markdown.py 中删除 .py 扩展名来修复此错误。这显然阻止了它导入自己而不是站点包中的降价模块。

      【讨论】:

      • 这可能是错误的答案,原因有几个。 1:任何重新安装 markdown 都会导致 markdown.py 重新出现,从而导致错误。 2:我在自动系统设置中遇到的情况(变得越来越普遍)真的很糟糕,尽管您也可以自动删除文件。 3:markdown.py 提供了一个有用的功能,因为它是 markdown 的命令行界面,因此删除它可能会删除某些用户或以后的功能。
      • 好点,但我在任何类型的 gunicorn/django 环境之外都遇到了这个错误。 Python 总是首先在当前目录中查找导入(因此,名为“foo.py”的文件中的“import foo”将导入自身,而不是您想要的名为“foo”的库。)在我的情况下,没有其他方法可以修复这只是修改“bin/markdown.py”。
      • 我实际上认为这是降价中的一个错误。 markdown.py 有一个修改 sys.path 的预导入例程,就像你上面写的一样,但只在 windows 上执行。最好总是这样做。我会尝试联系开发者。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 2019-06-11
      • 2018-10-19
      相关资源
      最近更新 更多