Python 3.15의 게으른 import로 CLI 속도 3배 향상
Working to Make Python Lazy
Python 3.15a7에 도입된 lazy imports(게으른 import) 기능은 PEP 810으로 제안되었으며, CLI 애플리케이션의 시작 시간을 크게 단축할 수 있습니다. 이 글에서는 lazy imports의 개념과 사용법, 그리고 이를 쉽게 적용할 수 있게 해주는 flake8-lazy 도구를 소개합니다. flake8-lazy는 코드에서 lazy로 선언할 모듈을 자동으로 찾아주고, __lazy_modules__ 목록을 관리해줍니다. 실제 적용 사례로 cibuildwheel에서 --help 실행 시간이 3~4배 빨라졌습니다. 또한 이 도구를 개발하면서 AI를 활용한 경험도 공유합니다.
uvx flake8-lazy --apply=list 명령 하나로 Python 3.15에서 코드를 마법처럼 더 빠르게 만들 수 있습니다!
HN 토론
17- dataflow
> 이 패턴은 예를 들어 게으를 수 없습니다: try: import numpy; except ModuleNotFoundError: ...
잠깐, 그건 나쁜 것 같네요. 이런 종류의 모듈(특히 numba)은 종종 지연 가져오기를 원하는 바로 그 모듈입니다. 왜 가져오기 시점에 존재 여부를 확인하는 방법을 제공하지 않나요? 그런 경우 존재하지 않음을 어떻게 처리해야 하나요?
- mhashemi
게으른 가져오기에 대해 의구심이 있지만, 특히 scipy는 메모리를 너무 많이 먹어서 점점 그 안에서 작은 유틸리티를 벤더링하고 있습니다. 좋은 게으른 가져오기가 큰 도움이 될 것입니다.
- yuriks
이 기능은 명령줄 도구에 정말 유용해 보입니다! 하지만 이 문단이 저를 멈칫하게 했습니다:
> 현재 게으른 가져오기를 비활성화하면 구문 키워드가 비활성화되어 순환 가져오기, 타입 검사 등에 사용할 수 없습니다.
제 생각에는 이것이 좋은 일입니다. 게으름은 의미적으로 중요하지 않아야 합니다. 의미를 유지하면서 게으름을 강제로 비활성화할 수 있는 능력은 린팅과 테스트에 중요하며, 대부분의 경우 순환 가져오기는 나쁜 코드 구조의 신호입니다.