<p>jinja2λŠ” 더 이상 pytest λ‘œλ”λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€</p>

에 λ§Œλ“  2020λ…„ 03μ›” 10일  Β·  18μ½”λ©˜νŠΈ  Β·  좜처: pallets/jinja

ν˜„μž¬ 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 λ‘œλ”μ— 일뢀 λ©”μ„œλ“œκ°€ λˆ„λ½λ˜μ–΄ μžˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  18 λŒ“κΈ€

이것은 #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 ν™•μΈν•΄λ³΄λŠ” 것도 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

1169λŠ” μˆ˜μ •μ„ μœ„ν•œ μ‹œλ„μž…λ‹ˆλ‹€. μ•„λ§ˆλ„ μ—¬μ „νžˆ λ³€κ²½ 둜그 등이 ν•„μš”ν•  κ²ƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ‹œλ„ν•΄ 보고 λ¬Έμ œκ°€ ν•΄κ²°λ˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€ @gaborbernat

λ¬Έμ œλŠ” μ—¬μ „νžˆ μœ νš¨ν•©λ‹ˆλ‹€.

#1182μ—μ„œ 2.11.2에 λŒ€ν•΄ pkg_resourcesλ₯Ό μ‚¬μš©ν•˜λ„λ‘ 되돌렀 3.0에 λŒ€ν•΄ #1169λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

μ΄κ²ƒμœΌλ‘œ μΆœμ‹œν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‹€λ₯Έ PR을 기닀리고 μžˆμŠ΅λ‹ˆλ‹€.

당신은 그것을 μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? πŸ˜„

λ‚˜λŠ” μ΄μ •ν‘œλ₯Ό κ°μ•ˆν•  λ•Œ # 1183이라고 μƒκ°ν•©λ‹ˆλ‹€.

λ³€κ²½ 사항을 λ˜λŒλ¦¬λŠ” 2.11.2λ₯Ό 방금 μΆœμ‹œν–ˆμŠ΅λ‹ˆλ‹€. 3.0은 μˆ˜μ • 사항과 ν•¨κ»˜ μƒˆλ‘œμš΄ λ™μž‘μ„ κ°–μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰