<p>jinja2 рдЕрдм рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рд▓реЛрдбрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ</p>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдорд╛рд░реНрдЪ 2020  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pallets/jinja

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, jinja2 рдпрд╛ рддреЛ _path рдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ get_filenames рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ: https://github.com/pallets/jinja/blob/master/src/jinja2/loaders.py#L262 -L281

рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдЕрднрд┐рдХрдерди рдкреБрдирд░реНрд▓реЗрдЦрдХ рди рддреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (рджреЗрдЦреЗрдВ 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 рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд░реВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рд▓реЛрдбрд░ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЧрд╛рдпрдм рд╣реИрдВред

рд╕рднреА 18 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ #резрезрекрео рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рд╣рдордиреЗ pkg_resources рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рдФрд░ рдЕрдм pkgutil.get_loader() рдФрд░ loader.get_filename() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдкрд╛рдЗрдЯреЗрд╕реНрдЯ рдХрд╛ рд▓реЛрдбрд░ get_filename рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред

рдпрд╣рд╛рдВ рд╣рдо рдкреИрдХреЗрдЬ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рдЬрд╝рд┐рдк рдФрд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдЖрдпрд╛рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рднреА рд╣реИрдВ: https://github.com/pallets/jinja/blob/45a76a3794a91e6d7077ced88c814a96cc87d5c2/src/jinja2/loaders.py#L262 -L267

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рдмрддрд╛рдпрд╛ рдерд╛, рдкрд╛рдЗрдЯреЗрд╕реНрдЯ рдХрд╛ рд▓реЛрдбрд░ get_filename рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

jinja2 рдЙрди рд▓реЛрдбрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзрд╛рд░рдгрд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ PEP 451 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ - рдпрд╣ рд╢рд╛рдпрдж pep451+ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕реНрдкреЗрдХ рдХреА .origin рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХреЗ рднреАрддрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдкрде рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкрд╛рдпрдерди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрди рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрднреЗрджреНрдп рдерд╛ред

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдмреЗрд╣рддрд░ рд╕реБрдЭрд╛рд╡ рд╣реИ рдЬреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ, рдЬрд╝рд┐рдкреЛрдВ рдФрд░ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реБрдП рд╡рд┐рднрд┐рдиреНрди рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдЦреЗрд▓рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред

cc @jaraco

рдпрджрд┐ рдЖрдк рдХреБрдЫ рд╕рдВрд╕рд╛рдзрди рд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреЛ https://docs.python.org/3/library/importlib.html#module -importlib.resources рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП; рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдирд╣реАрдВ?

resources рд▓рд┐рдП рд╕рднреА "рд╕рдВрд╕рд╛рдзрди" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП __init__.py рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдЬрд┐рдВрдЬрд╛ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдФрд░ рднреА рдЕрдзрд┐рдХ рдЕрд╕рдВрдЧрдд рд╣реЛрдЧреАред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП https://gitlab.com/python-devs/importlib_resources/issues/58#note_232533726 рджреЗрдЦреЗрдВред

рдпрд╣ рдПрдХ рд╕рд╣рд╛рдпрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рдХреЛрдб рдХреЛ jinja2 рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ: https://github.com/asottile/aspy.refactor_imports/blob/519ee18ea75e0045b9b53644c627c6817b2a0748/aspy/refactor_imports/classify.py#L76 -L91

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ imporltib.resources рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдЕрд╡рд░реЛрдзрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рдЕрдкрдирд╛рдиреЗ рд╕реЗ jinja2 рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдЧрдорди рд╣реЛрддрд╛ рд╣реИ; рдЕрд░реНрдерд╛рддреН рдЕрдЪрд╛рдирдХ рд╕реЗ рдкрд╛рдЗрдЯреЗрд╕реНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рддреЛ рд╣рд╛рдБ рд╢рд╛рдпрдж @asottile рд▓рд┐рдВрдХреНрдб рдХреЛрдб рдХреЛ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдмрдХрд┐ рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж importlib_resources рдХреЛ рдПрдХ рдЕрдкрдбреЗрдЯ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? https://importlib-resources.readthedocs.io/en/latest/changelog%20 (links).html#v1-1-0 рдЬрд╛рдВрдЪрдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

1169 рдПрдХ рдлрд┐рдХреНрд╕ рдкрд░ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИ, рдореБрдЭреЗ рд╢рд╛рдпрдж рдЕрднреА рднреА рдЪреЗрдВрдЬрд▓реЙрдЧ рдЖрджрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╢рд╛рдпрдж рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ @gaborbernat

рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдореБрджреНрджрд╛ рдЕрднреА рднреА рд╡реИрдз рд╣реИред

2.11.2 рдХреЗ рд▓рд┐рдП pkg_resources рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #1182 рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛, 3.0 рдХреЗ рд▓рд┐рдП #1169 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рд░рд┐рд▓реАрдЬ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ?

рдПрдХ рдФрд░ рдкреАрдЖрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВред

рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ #1183 рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдмрд╕ 2.11.2 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЙрд▓рдЯ рджреЗрддрд╛ рд╣реИред 3.0 рдореЗрдВ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

samatjain picture samatjain  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

htgoebel picture htgoebel  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Xion picture Xion  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

guettli picture guettli  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Yannik picture Yannik  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ