저는 Python의 runpy 모듈의 관리자이며 현재 수입 시스템의 관리자 중 하나입니다. 수입 시스템은 매우 유연하지만, 약간의 조정 없이도 도매를 채택하지 않는 것이 좋습니다. 이전 버전과의 호환성 문제로 인해 필요 이상으로 어색한 것이 많습니다.
파이썬에서 PEP 302로 인해 한 가지 문제는 핵심 수입 시스템을 사용하는 데 얼마나 오래 걸렸는가입니다. 10 년 중 더 나은 기간 동안, 가져 오기 후크로 복잡한 작업을 수행하는 사람은 PEP 302 호환 로더 (예 : 우편 가져 오기)와 표준 파일 시스템 기반 가져 오기 메커니즘을 처리하는 두 가지를 구현해야합니다. 다가오는 3.3에서만 PEP 302 로더를 처리 할 때 표준 파일 시스템 가져 오기 메커니즘을 통해 가져온 모듈을 처리하게됩니다. 피할 수 있다면 그 실수를 반복하지 마십시오.
PEP 420 (Python 3.3 용으로 구현)은 프로토콜을 추가하여 수입자가 네임 스페이스 패키지에 부분을 제공 할 수 있도록합니다. 또한 Finder API 정의의 이름 지정 문제 (잘못된 이름의 "find_module"을보다 정확한 "find_loader"로 대체)를 수정합니다. 이것은 3.3rc1이 몇 주 안에 돌아가는 시간까지 언어 사양에 더 명확하게 문서화되어야합니다.
또 다른 주목할만한 문제는 PEP 302에 구체적으로 문서화 된 접근 방식이 너무 많은 프로세스 글로벌 상태를 가지고 있다는 것입니다. 그 길을 따라 가지 마십시오-좀 더 일관된 객체 모델로 상태를 캡슐화하여 다른 모듈을 선택적으로 가져 오기가 더 쉬워집니다 (C 확장 모듈은 그러한 캡슐화를 완전히 효과적이지만 일부 수준의 캡슐화조차도 방해합니다 도움이 될 수 있습니다).
PEP 406 (http://www.python.org/dev/peps/pep-0406/)은 개선 된 상태 캡슐화를 통해 파이썬 접근 방식의 역 호환 가능한 진화를 논의합니다. 처음부터 캡슐화 된 상태 모델이있는 경우 API를 적절하게 정의하고 임포터 및 로더가 전역 상태에 액세스하지 않도록 할 수 있습니다 (대신 활성 엔진에 대한 참조를 전달 함).
PEP 302에서 누락 된 또 다른 부분은 수입 업체가 해당 수입 업체가 제공 한 모듈에 대해 반복자를 요청할 수있는 기능입니다 (이는 동결 유틸리티 및 문서 문자열을 추출하는 자동 문서 유틸리티와 같은 경우에 필요함). : 그것은 매우 유용하기 때문에, 당신은 아마 가져 오기 이동에서 표준화 더 나을 것 http://docs.python.org/dev/library/pkgutil#pkgutil.iter_modules 우리는 아마 마침내 공식적으로 지정된이 상승합니다 ( Python 3.4의 API)
그리고 마지막 의견은 임포트 시스템과 로더 객체 사이의 책임 분담을 면밀히 검토해야한다는 것입니다. 특히 "load_module"API를 별도의 "init_module"및 "exec_module"단계로 분할하는 것이 좋습니다. 그러면 로더가 가져 오기 상태와 직접 상호 작용해야하는 정도를 최소화 할 수 있습니다.
PEP 302와 importlib는보다 유연한 수입 시스템의 출발점이지만 피해야 할 실수는 분명히 있습니다.