无法再在jinja2中创建packageloader

2024-09-30 04:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试在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'

这以前有用。我还不知道最近的变化会导致什么。有一个templates目录,它有init.py。你知道吗

这个:HTML templating using Jinja2 No module named your app看起来是相同的问题,但是建议不要使用PackageLoader。由于我的代码在两周前运行,我担心我弄坏了其他东西,而这只是一个症状,所以如果我能弄清楚到底发生了什么,我宁愿不要让症状消失。你知道吗

更奇怪的是“青色”是程序的名字。在文档中,它使用“yourapplication”,所以我假设它可以是任何字符串,并使用它在内部命名。。。你知道吗


Tags: inpygetvenvsinitloaderprovidertemplates
1条回答
网友
1楼 · 发布于 2024-09-30 04:26:37

根据错误显示:

359 > module = sys.modules[moduleOrReq]

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

>> import sys
>> module = sys.modules

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

根据您的代码,您试图从上面的dictionary对象获取cyan模块,但是没有任何键可以与模块名“cyan”匹配,因为cyan.py既不在本地目录中,也不在系统路径中。你知道吗

在同一目录或python的模块路径中创建一个名为cyan.py的模块将在dictionary对象中获取一个以上的模块,现在可以使用sys.modules['cyan']调用它。

相关问题 更多 >

    热门问题