νμ¬ jinja2λ _path μ μ λλ get_filenamesλ₯Ό μμν©λλ€: https://github.com/pallets/jinja/blob/master/src/jinja2/loaders.py#L262 -L281
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
λ₯Ό μ 곡 νλ©΄ μλ
μ°λ¦¬λ ν¨ν€μ§λ₯Ό κ°μ§ ν κ²½μ° μ¬κΈ°μ, μ§μ μ°νΈ λ° λ€μ μ€νμ΄μ€ μμ μ μ£Όλ³μ μ½λμμ μ΄λ€ ν΄κ²° λ°©λ²λ μμ΅λλ€ κ² : https://github.com/pallets/jinja/blob/45a76a3794a91e6d7077ced88c814a96cc87d5c2/src/jinja2/loaders.py#L262 -L267
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μ shimmyν μ μλμ§ νμΈ νκ² μ΅λλ€.
μ΄κ²μ 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λ₯Ό μ¬μ©ν©λλ€.
μ΄κ²μΌλ‘ μΆμν μ μμ΅λκΉ?
λ€λ₯Έ PRμ κΈ°λ€λ¦¬κ³ μμ΅λλ€.
λΉμ μ κ·Έκ²μ μ°κ²°ν μ μμ΅λκΉ? π
λλ μ΄μ νλ₯Ό κ°μν λ # 1183μ΄λΌκ³ μκ°ν©λλ€.
λ³κ²½ μ¬νμ λλ리λ 2.11.2λ₯Ό λ°©κΈ μΆμνμ΅λλ€. 3.0μ μμ μ¬νκ³Ό ν¨κ» μλ‘μ΄ λμμ κ°μ΅λλ€.