pkg_resources.DefaultProvider应该使用命名空间包吗?

时间:2015-11-27 16:02:57

标签: python jinja2 setuptools pkg-resources

我有一个命名空间包,在该命名空间的一个包中,我有一个Jinja2模板。我正在使用jinja2.PackageLoader加载它。

但是,如果我创建jinja2.PackageLoader('namespacepackage')然后尝试list_templates(),则无法找到templates/文件夹,我可以看到原因:

它会创建一个pkg_resources.DefaultProvider('namespacepackage'),然后使用其resource_listdir()方法,将其作为参数'templates'。 但是resource_listdir()在内部使用self.module_path加入此路径,并且self.module_path是从模块的__path__属性设置的:

self.module_path = os.path.dirname(getattr(module, '__file__', ''))

由于namespacepackage没有__file__DefaultProvider.module_path设置为'',并且Jinja中的模板查找失败。

这应该怎么样? Aren我应该将包名称提供给PackageLoader 如果我引用特定的namespacepackage.module,则一切正常,因为该模块具有__file__,因此DefaultProvider.module_path设置正确。

0 个答案:

没有答案