現在、jinja2は_pathdefinedまたは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ローダーにいくつかのメソッドがないのかわからない。
これは#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、および名前空間をサポートしながら、さまざまなローダーでより適切に機能するより良い提案があれば、私は助けていただければ幸いです。
cc @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 :
これはimporltib.resources
の初期設計のオクルージョンである可能性があります。 ただし、現在の形式で採用すると、jinja2の機能が低下します。 つまり、突然のすべてがpytestをサポートしなくなったことです。 したがって、おそらく@asottileリンクコードを追加してギャップを埋め、アップストリームがサポートを追加する必要があります。
importlib_resources
がサブディレクトリを許可するアップデートを取得したようです。 https://importlib-resources.readthedocs.io/en/latest/changelog%20(links).html#v1-1-0同様にチェックアウトするのが良いかもしれません。
気にしないでください、問題はまだ有効です。
#1182で2.11.2のpkg_resourcesの使用に戻り、3.0の#1169を使用します。
これでリリースしてもらえますか?
もう1つのPRを待っています。
リンクできますか? 😄
マイルストーンを考えると#1183だと思います
変更を元に戻す2.11.2をリリースしました。 3.0は、修正により新しい動作になります。