python - 无法再在 jinja2 中创建 packageloader
问题描述
当我尝试在 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。
这个:使用 Jinja2 的 HTML 模板没有命名您的应用程序的模块看起来像同样的问题,但建议是不要使用 PackageLoader。由于我的代码 2 周前工作,我担心我破坏了其他东西,这只是一个症状,所以我宁愿不只是让症状消失,如果我能弄清楚实际发生了什么。
更奇怪的是,“青色”是程序的名称。在文档中,它使用“yourapplication”,所以我认为它可以是任何字符串,并在内部使用它来命名事物......
解决方案
根据错误显示:
359--> 模块=系统模块[模块或请求]
同一行有一个错误,因为当我们执行以下代码时:
>> import sys
>> module = sys.modules
变量模块是key:<ModuleName>
和的字典value:<ModuleObject>
根据您的代码,您试图cyan
从上面的字典对象中获取模块,但没有任何键可以与您的模块名称“青色”匹配,因为cyan.py
它既不在本地目录中,也不在 SYSTEM-PATH 中。
为 python创建一个cyan.py
在同一目录或模块路径中命名的模块将在您的字典对象中再获取一个模块,现在您可以使用sys.modules['cyan']
.
推荐阅读
- java - 将变量添加到 framework.jar 后,它仍然无法访问
- matlab - findpeaks 函数给出太多结果
- python - AWS - S3 - GetBucketPolicy
- r - 有没有一种简单的方法来判断存储在一个列表中的许多数据帧是否包含相同的列?
- javascript - 陷入 else if Javascript 循环
- html - CSS位置相对div没有响应
- python - warnings.simplefilter("always") 不会强制在 Python 2.7 中发出警告
- c++11 - 自定义模板的 SFINAE 失败。需要了解原因
- angular - 在材料之上构建自定义 UI 组件库
- sql - Postgresql 计数行分组