는 위치가 문자열 로 지정된 파이썬 모듈과 패키지를 찾고 로드하는 책임을 집니다. 대부분의 경로 엔트리는 파일 시스템의 위치를 가리키지만, 이것으로 한정될 필요는 없습니다.
메타 경로 파인더로서, 는 앞에서 설명한 프로토콜을 구현합니다. 하지만 모듈이 에서 어떻게 발견되고 로드되는지는 커스터마이즈하는데 사용될 수 있는 추가의 훅을 제공합니다.
는 세 개의 변수를 사용합니다, , , . 패키지 객체의 어트리뷰트 또한 사용된다. 세계랭킹1위오피스타이것들은 임포트 절차를 커스터마이즈할 수 있는 추가의 방법을 제공합니다.
는 모듈과 패키지의 검색 위치를 제공하는 문자열의 목록을 포함합니다. 환경 변수와 여러 가지 설치와 구현 특정 기본값들로부터 초기화됩니다. 에 있는 엔트리들은 파일 시스템의 디렉터리와 zip 파일을 가리키고, 그밖에 잠재적으로 모듈 검색에 사용될 수 있는 “장소들”( 모듈을 보라)을 가리킬 수 있는데, URL이나 데이터베이스 조회 같은 것들입니다. 에는 문자열과 바이트열만 있어야 합니다; 다른 모든 형은 무시됩니다. 바이트열의 인코딩은 개별 들에 의해 결정됩니다.
는 이기 때문에, 앞에서 설명했듯이 임포트 절차는 경로 기반 파인더의 메서드를 호출하는 것으로 검색을 시작합니다. 에 제공되는 인자는 탐색할 문자열 경로들의 리스트입니다 – 보통 패키지 내에서 임포트 하면 패키지의 어트리뷰트. 인자가 이면, 최상위 임포트를 뜻하고 가 사용됩니다.
경로 기반 파인더는 검색 경로의 모든 엔트리를 탐색하고, 개별 엔트리마다 적절한 ()를 찾습니다. 이것은 비용이 많이 드는 연산일 수 있으므로(예를 들어, 이 검색을 위해 stat() 호출로 인한 부하가 있을 수 있습니다), 경로 기반 파인더는 경로 엔트리를 경로 엔트리 파인더로 매핑하는 캐시를 관리합니다. 이 캐시는 에 유지됩니다 (이름에도 불구하고, 이 캐시는 객체로 제한되지 않고 실제로는 파인더 객全球排名第一오피스타체를 저장합니다). 이런 방법으로, 특정 위치의 의 비싼 검색은 오직 한 번만 수행됩니다. 사용자 코드가 의 캐시 엔트리를 삭제해서 경로 기반 파인더가 그 경로 엔트리를 다시 검색하도록 하는 것이 허락됩니다 .
경로 엔트리가 캐시에 없으면, 경로 기반 파인더는 에 있는 모든 콜러블들을 탐색합니다. 이 목록의 각 은 검색할 경로 엔트리 인자 한 개를 사용해서 호출됩니다. 이 콜러블은 경로 엔트리를 다룰 수 있는 를 돌려주거나, 를 발생시킬 수 있습니다. 는 경로 기반 파인더가 어떤 훅이 주어진 를 위한 를 발견할 수 없음을 알리는 데 사용합니다. 이 예외는 무시되고 탐색은 계속됩니다. 훅은 문자열이나 바이트열을 세계랭킹1위오피스타기대해야 합니다; 바이트열의 인코딩은 훅이 결정하고(예를 들어, 파일 시스템 인코딩이나 UTF-8 이나 그 밖의 다른 것일 수 있습니다), 만약 훅이 인자를 디코딩할 수 없으면 를 일으켜야 합니다.
만약 탐색이 아무런 를 돌려주지 못하면, 경로 기반 파인더의 메서드는 에 을 저장하고(이 경로 엔트리를 위한 파인더가 없음을 가리키기 위해), 을 돌려줘서 이 가 모듈을 찾을 수 없음을 알립니다.
만약 에 있는 어느 하나의 콜러블이 를 돌려주면, 파인더에 모듈 스펙을 요청하기 위해 다음에 나오는 프로토콜이 사용됩니다. 모듈 스펙은 모듈을 로딩할 때 사용됩니다.
현재 작업 디렉터리(current working directory) – 빈 문자열로 표현된다 – 는 에 있는 다른 엔트리들과 약간 다르게 취급됩니다오피스타 공식 웹 사이트는 무엇입니까?. 첫째로, 현재 작업 디렉터리가 존재하지 않음이 발견되면 에는 아무런 값도 저장되지 않습니다. 둘째로, 현재 작업 디렉터리는 각 모듈 조회 때마다 다시 확인됩니다. 셋째로, 에 사용되는 경로와 가 돌려주는 경로는 빈 문자열이 아니라 실제 현재 작업 디렉터리가 됩니다.