<p>jinja2はpytestローダーをサポートしなくなりました</p>

作成日 2020年03月10日  ·  18コメント  ·  ソース: pallets/jinja

現在、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ローダーにいくつかのメソッドがないのかわからない。

全てのコメント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、および名前空間をサポートしながら、さまざまなローダーでより適切に機能するより良い提案があれば、私は助けていただければ幸いです。

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同様にチェックアウトするのが良いかもしれません。

1169は修正の試みであり、おそらくまだ変更ログなどが必要ですが、おそらく試してみて、問題が修正されるかどうかを確認できます@gaborbernat

気にしないでください、問題はまだ有効です。

#1182で2.11.2のpkg_resourcesの使用に戻り、3.0の#1169を使用します。

これでリリースしてもらえますか?

もう1つのPRを待っています。

リンクできますか? 😄

マイルストーンを考えると#1183だと思います

変更を元に戻す2.11.2をリリースしました。 3.0は、修正により新しい動作になります。

このページは役に立ちましたか?
0 / 5 - 0 評価