【问题标题】:pyramid_jinja2: ImportError: cannot import name Environmentpyramid_jinja2:ImportError:无法导入名称环境
【发布时间】:2015-09-25 02:37:25
【问题描述】:

我正在阅读 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

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

【问题讨论】:

    标签: python jinja2 pyramid


    【解决方案1】:

    @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

    【讨论】:

      【解决方案2】:

      很难说,但我的第一个猜测是,您似乎将项目命名为 jinja2,这将与 jinja2 包以一些奇怪的方式发生冲突,具体取决于执行导入的模块等。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2015-06-02
          • 2021-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-31
          • 2014-10-10
          • 2014-09-20
          相关资源
          最近更新 更多