当我尝试使用以下方法在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”,因此我认为它可以是任何字符串,并且在内部使用它来命名事物...
答案 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']
进行调用。