рд╡рд░реНрддрдорд╛рди рдореЗрдВ, 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 рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд░реВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рд▓реЛрдбрд░ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЧрд╛рдпрдм рд╣реИрдВред
рдпрд╣ #резрезрекрео рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рд╣рдордиреЗ 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 рдЬрд╛рдВрдЪрдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдореБрджреНрджрд╛ рдЕрднреА рднреА рд╡реИрдз рд╣реИред
2.11.2 рдХреЗ рд▓рд┐рдП pkg_resources рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #1182 рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛, 3.0 рдХреЗ рд▓рд┐рдП #1169 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рд░рд┐рд▓реАрдЬ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ?
рдПрдХ рдФрд░ рдкреАрдЖрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВред
рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ #1183 рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдмрд╕ 2.11.2 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЙрд▓рдЯ рджреЗрддрд╛ рд╣реИред 3.0 рдореЗрдВ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред