pyramid_jinja2: ImportError: cannot import name Environment

pyramid_jinja2: ImportError: cannot import name Environment

我正在阅读 Pyramid 框架的教程,但我目前停留在 teaches the use of Jinja2 as the templating engine. 上。似乎当我 运行 使用 nosetests 进行测试时,我得到了这个奇怪的 ImportError,指出无法从 Jinja2 模块导入名称 Environment。有趣的是,当我 pserve 这个网站时,它工作得很好。似乎这个错误只会在测试期间发生......我目前正在使用 Ubuntu 14.04.

处理 virtualenv

有什么建议吗?

这是堆栈跟踪...

======================================================================
ERROR: test_home (jinja2.tutorial.tests.TutorialFunctionalTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/bk/pg/pyramid/quick_tutorial/jinja2/tutorial/tests.py", line 30, in setUp
    app = main({})
  File "/home/bk/pg/pyramid/quick_tutorial/jinja2/tutorial/__init__.py", line 5, in main
    config.include('pyramid_jinja2')
  File "/home/bk/pg/pyramid/venv/local/lib/python2.7/site-packages/pyramid/config/__init__.py", line 727, in include
    c = self.maybe_dotted(callable)
  File "/home/bk/pg/pyramid/venv/local/lib/python2.7/site-packages/pyramid/config/__init__.py", line 825, in maybe_dotted
    return self.name_resolver.maybe_resolve(dotted)
  File "/home/bk/pg/pyramid/venv/local/lib/python2.7/site-packages/pyramid/path.py", line 320, in maybe_resolve
    return self._resolve(dotted, package)
  File "/home/bk/pg/pyramid/venv/local/lib/python2.7/site-packages/pyramid/path.py", line 327, in _resolve
    return self._zope_dottedname_style(dotted, package)
  File "/home/bk/pg/pyramid/venv/local/lib/python2.7/site-packages/pyramid/path.py", line 376, in _zope_dottedname_style
    found = __import__(used)
  File "/home/bk/pg/pyramid/venv/local/lib/python2.7/site-packages/pyramid_jinja2-2.5-py2.7.egg/pyramid_jinja2/__init__.py", line 6, in <module>
    from jinja2 import Environment as _Jinja2Environment
ImportError: cannot import name Environment

----------------------------------------------------------------------

这很难说,但我的第一个猜测是你将项目命名为 jinja2 并且这将以一些奇怪的方式与 jinja2 包冲突,具体取决于模块正在做什么进口等

@Michael Merickel 是对的。您的 jinja2 模块与真实模块之间存在冲突。这个错误源于 python2 进口政治。但是您可以在脚本的第一行添加魔法语句 from __future__ import absolute_import。它将相对导入更改为绝对导入。

更多信息:PEP 0328 -- Imports: Multi-Line and Absolute/Relative

但如果您想从 /home/bk/pg/pyramid/quick_tutorial/ 执行脚本,我的解决方案对您没有帮助。因为在这种情况下,将有两种可能的方法来解决 import jinja2.

在我使用 pip install -r requirements.txt 在 Ubuntu 机器上安装 Django 项目的所有包的情况下,我 运行 遇到了这个错误和许多其他安装错误。

为了解决这个问题,我卸载并重新安装了 Jinja2,它成功了。

此外,请注意根据您正在使用的 Python 版本使用 pip3/pip3.x,而不仅仅是 pip,因为 Ubuntu 中的默认 python 解释器是Python2.7