不能再在jinja2中创建packageloader

时间:2019-08-07 15:12:24

标签: python jinja2

当我尝试使用以下方法在Jinja2中创建packageLoader时:

loader=jinja2.PackageLoader( 'cyan', 'templates')

我得到一个错误:

In [2]: loader=PackageLoader( 'cyan', 'templates')                                                      
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~/work/venvs/CYAN/lib/python3.7/site-packages/pkg_resources/__init__.py in get_provider(moduleOrReq)
    358     try:
--> 359         module = sys.modules[moduleOrReq]
    360     except KeyError:

KeyError: 'cyan'

During handling of the above exception, another exception occurred:

ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-2-9f5a5a8d0f55> in <module>
----> 1 loader=PackageLoader( 'cyan', 'templates')

~/work/venvs/CYAN/lib/python3.7/site-packages/jinja2/loaders.py in __init__(self, package_name, package_path, encoding)
    222         from pkg_resources import DefaultProvider, ResourceManager, \
    223                                   get_provider
--> 224         provider = get_provider(package_name)
    225         self.encoding = encoding
    226         self.manager = ResourceManager()

~/work/venvs/CYAN/lib/python3.7/site-packages/pkg_resources/__init__.py in get_provider(moduleOrReq)
    359         module = sys.modules[moduleOrReq]
    360     except KeyError:
--> 361         __import__(moduleOrReq)
    362         module = sys.modules[moduleOrReq]
    363     loader = getattr(module, '__loader__', None)

ModuleNotFoundError: No module named 'cyan'

这用于工作。我还没有弄清楚最近的变化可能导致了什么。有一个模板目录,它具有 init .py。

这:HTML templating using Jinja2 No module named your app看起来是一样的问题,但是建议不要使用PackageLoader。自从我的代码在两周前开始工作以来,我担心我发生了其他事情,这只是一种症状,因此,如果我能弄清实际情况,我宁愿不只是消除这种症状。

与此有关的另一件事是,“ cyan”是程序的名称。在文档中,它使用“ yourapplication”,因此我认为它可以是任何字符串,并且在内部使用它来命名事物...

1 个答案:

答案 0 :(得分:1)

根据显示以下内容的错误:

  

359-> module = sys.modules [moduleOrReq]

同一行中有一个错误,因为当我们执行以下代码时:

>> import sys
>> module = sys.modules

变量模块是key:<ModuleName>value:<ModuleObject>的字典

根据您的代码,您试图从字典对象上方获取cyan模块,但是没有任何可以与模块名称“ cyan”匹配的键,因为cyan.py都不在您的本地目录或您的SYSTEM-PATH。

在同一目录或python的模块路径中创建名为cyan.py的模块将在您的字典对象中获取另外一个模块,现在您可以使用sys.modules['cyan']进行调用。