Alert
μ΄ κΈμ Claude Codeμ λμμ λ°μ μμ±λμμ΅λλ€
TL;DR
- Python 3.15(PEP 810)λΆν°
lazyν€μλλ‘ λͺ μμ μ§μ° import κ°λ₯- μ©λ 3κ°μ§: μμ μκ° μ΅μ ν, νμ μ΄λ Έν μ΄μ μ μ© import, μν import ν΄κ²°
- μ£Όμ: lazy importλ import μμ μ μ ν¨μ± κ²μ¬λ₯Ό νμ§ μμ λ°νμ μλ¬ μν
Source
1. lazy importλ
Python 3.15μ λμ
λλ lazy ν€μλλ₯Ό import μμ λΆμ΄λ©΄, ν΄λΉ λͺ¨λμ μ¦μ λ‘λνμ§ μκ³ μ€μ λ‘ μ κ·Όν λκΉμ§ μ§μ°μν¨λ€.
# κΈ°μ‘΄ (eager) β import μμ μ μ¦μ λ‘λ
from json import loads
# μλ‘μ΄ (lazy) β μ€μ λ‘ loadsλ₯Ό μ¬μ©ν λ λ‘λ
lazy from json import loads
lazy import asyncioλͺ¨λ importμ from import λͺ¨λ μ§μνμ§λ§, from x import * (star import)μ ν¨μ λ΄λΆ importμλ μ¬μ©ν μ μλ€.
2. μ νμνκ° β 3κ°μ§ μ©λ
1) μμ μκ° μ΅μ ν
CLI λꡬμμ --helpλ§ μΆλ ₯ν λλ λ¬΄κ±°μ΄ λͺ¨λμ μ λΆ λ‘λνλ©΄ λλ €μ§λ€. lazy importλ‘ μ€μ νμν μμ κΉμ§ μ§μ°νλ©΄ μ²΄κ° μμ μκ°μ΄ μ€μ΄λ λ€.
python -X importtimeμ΄λ import-time-waterfall κ°μ λκ΅¬λ‘ λλ¦° importλ₯Ό νλ‘νμΌλ§ν λ€, ν΄λΉ λͺ¨λλ§ lazyλ‘ μ ννλ λ°©μμ΄ κΆμ₯λλ€.
2) νμ μ΄λ Έν μ΄μ μ μ© import
νμ
ννΈμλ§ μ¬μ©λλ λͺ¨λμ λ°νμμ λ‘λν νμκ° μλ€. κΈ°μ‘΄μλ TYPE_CHECKING κ°λλ₯Ό μΌμ§λ§, lazy importλ‘ λ κ°κ²°νκ² ν΄κ²° κ°λ₯νλ€.
# κΈ°μ‘΄ λ°©μ
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from heavy_module import SomeType
# lazy import λ°©μ
lazy from heavy_module import SomeType3) μν import ν΄κ²°
λͺ¨λ Aκ° Bλ₯Ό importνκ³ , Bκ° λ€μ Aλ₯Ό importνλ μν μμ‘΄ μν©μμ, νμͺ½μ lazyλ‘ λ°κΎΈλ©΄ μνμ΄ κΉ¨μ§λ€.
3. μ£Όμν μ
lazy importλ μ μΈ μμ μ λͺ¨λ μ‘΄μ¬ μ¬λΆλ₯Ό κ²μ¦νμ§ μλλ€.
lazy import some_nonexistent_module # μλ¬ μμ΄ ν΅κ³Ό
print(some_nonexistent_module) # μ΄ μμ μμμΌ ImportError λ°μμ€νλ λλ½λ μμ‘΄μ±μ κ°λ° λ¨κ³μμ μ‘μ§ λͺ»νκ³ λ°νμ(νλ‘λμ )μμ ν°μ§ μ μλ€. λμ λ°©λ²μ λ€μκ³Ό κ°λ€.
- ν μ€νΈ 컀λ²λ¦¬μ§ ν보
- νμ 체컀(mypy, pyright) μ¬μ© β import μ€λ₯λ₯Ό μ μ μΌλ‘ κ°μ§
- κ°λ°/νλ‘λμ νκ²½μ μμ‘΄μ± μΌμΉ νμΈ
4. νμ νΈνμ±
Python 3.14 μ΄νμμλ λμνλλ‘ __lazy_modules__ λ³μλ₯Ό μ€μ νλ λ°©λ²μ΄ μλ€.
__lazy_modules__ = True # import λ¬Έ μμ λ°°μΉ
from json import loads # 3.15μμλ lazy, 3.14 μ΄νμμλ eagerimport μ λ ¬ λκ΅¬κ° μ΄ λ³μλ₯Ό μ½λλ‘ μΈμν΄μ μ΄ν importλ₯Ό 무μν μ μλ€λ λ¨μ μ΄ μλ€.