<p>jinja2 不再支持 pytest 加载器</p>

创建于 2020-03-10  ·  18评论  ·  资料来源: pallets/jinja

目前,jinja2 需要定义 _path 或 get_filenames: https :

pytest 断言重写器既没有定义(参见 https://github.com/pytest-dev/pytest/blob/master/src/_pytest/assertion/rewrite.py#L48),也没有在源代码上运行测试套件具有以下全局性:

from jinja2 import PackageLoader
LOADER = PackageLoader(__name__, "templates")

将失败:

    raise ValueError(
E   ValueError: The 'xxx' package was not installed in a way that PackageLoader understands.

不确定这里jinja2是否需要支持更多获取模板根的方法,或者pytest loader缺少一些方法。

所有18条评论

这似乎与#1148有关。 我们放弃了pkg_resources ,现在使用pkgutil.get_loader()loader.get_filename() 。 如果 Pytest 的加载器提供get_filename应该可以工作。

这是我们检测包的地方,周围代码中还有一些解决方法来支持 zip 和命名空间导入: https :

正如我在第一篇文章中指出的那样,Pytest 的加载程序没有提供get_filename 。 你确定它必须适用于任何装载机吗?

jinja2 正在对不属于PEP 451 的加载器做出假设——它可能应该使用 pep451+ 世界中模块规范的.origin属性

我们需要一种方法来获取包中文件的路径以便加载它们。 这似乎是使用 Python 提供的 API 做到这一点的方法,但不可否认,关于如何使用这些 API 做任何事情的文档对我来说几乎是难以理解的。

如果有人有更好的建议,可以在支持目录、zip 和命名空间的同时更好地使用不同的加载程序,我将不胜感激。

抄送@jaraco

如果你想加载一些资源,你不应该使用https://docs.python.org/3/library/importlib.html#module -importlib.resources; 你不需要知道文件的来源,只需要知道它包含什么,不是吗?

resources要求所有“资源”目录都具有__init__.py文件,这与 Jinja 的工作方式更加不兼容。 有关我的反馈,请参阅https://gitlab.com/python-devs/importlib_resources/issues/58#note_232533726

这可能是一个有用的起点,我会看看我是否可以将一些代码放入 jinja2 中: https: //github.com/asottile/aspy.refactor_imports/blob/519ee18ea75e0045b9b53644c627c6817b2a0748/aspy/classify.pyL17L/

似乎这可能是imporltib.resources的初始设计的遮挡; 以目前的形式采用它,虽然会导致 jinja2 的功能回归; 即突然不再支持pytest; 所以是的,可能应该添加@asottile链接代码来填补空白,同时上游添加支持。

看起来importlib_resources有一个允许子目录的更新? https://importlib-resources.readthedocs.io/en/latest/changelog%20 (links).html#v1-1-0 也可以看看。

1169 是一个修复尝试,我可能仍然需要更改日志等,但您可以尝试一下,看看它是否能解决您的问题@gaborbernat

没关系,这个问题仍然有效。

在 #1182 中恢复为 2.11.2 使用 pkg_resources,将使用 #1169 用于 3.0。

我们可以发布这个吗?

等待另一个 PR。

你能链接它吗? 😄

鉴于里程碑,我怀疑它是 #1183

刚刚发布的 2.11.2 恢复了更改。 3.0 将具有修复的新行为。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

AMDmi3 picture AMDmi3  ·  4评论

harobed picture harobed  ·  6评论

glasserc picture glasserc  ·  4评论

The-Compiler picture The-Compiler  ·  4评论

DriverX picture DriverX  ·  4评论