파이썬 코드를 생성할 때 다른 파이썬 파일이나 패키지의 코드에 접근해야 한다는 것을 알게 되는 경우가 많습니다. 다른 파이썬 파일이나 패키지를 현재 코드로 가져와야 할 때입니다. 따라서 이것을 달성하는 직접적인 방법은 현재 파이썬 프로그램 상단에 아래 문장을 작성하는 것입니다.
import package_name or module_name or from pacakge_name import module_name/object_name
위의 문장을 파싱하면 인터프리터는 다음을 수행합니다.
-
인터프리터는 이전에 이미 가져온 모든 모듈의 캐시에서 이름을 찾습니다. sys.modules에 있는 이 캐시 모듈의 이름입니다.
-
위의 단계에서 찾지 못하면 인터프리터는 내장 모듈 목록에서 검색합니다. 이 모듈은 파이썬 표준 라이브러리의 일부입니다.
-
위의 2단계에서 여전히 찾을 수 없는 경우 인터프리터는 검색할 첫 번째 디렉터리로 현재 디렉터리가 있는 sys.path에 정의된 디렉터리 목록에서 패키지 또는 모듈 이름을 검색합니다.
-
위의 단계에서 가져온 모듈을 찾으면 패키지 또는 모듈의 이름이 현재 프로그램의 로컬 범위에 바인딩됩니다.
-
패키지나 모듈을 찾을 수 없으면 ModuleNotFoundError가 발생합니다.
가져오기에 대한 몇 가지 규칙입니다.
import 문은 해당 문을 사용하는 파일의 맨 위에 언급되어야 합니다. import를 언급하는 순서는 아래와 같습니다.
-
Python의 표준 라이브러리 모듈
-
타사 모듈에서 가져오기
-
로컬 애플리케이션에서 가져오기
절대 가져오기
이 유형의 가져오기에서는 가져올 패키지/모듈/함수의 전체 경로를 지정합니다. 디렉토리 구조에 대해 점(.)이 슬래시(/) 속도로 사용됩니다.
패키지에 대해 다음 디렉토리 구조를 고려하십시오.
python_project_name/packageA/moduleA1.py python_project_name/packageA/moduleA2.py
또한 moduleA2에 myfunc라는 함수 이름이 있다고 가정해 보겠습니다. 해당 함수를 현재 파이썬 프로그램으로 가져오고 싶을 때 절대 경로를 사용하여 다음 import 문을 언급합니다.
from packageA.moduleA2 import myfunc
절대 가져오기의 가장 큰 장점은 가져오기가 발생하는 위치를 명확하게 표시하는 반면에 때때로 시간이 꽤 오래 걸릴 수 있다는 것입니다.
상대 가져오기
상대 가져오기에서는 가져온 모듈을 사용하는 현재 스크립트의 위치를 기준으로 가져온 패키지의 경로를 언급합니다.
점은 현재 위치에서 한 단계 위의 디렉토리를 나타내고 두 개의 점은 위로 두 개의 디렉토리를 나타내는 식입니다.
패키지에 대해 다음 디렉토리 구조를 고려하십시오.
python_project_name/packageA/moduleA1.py python_project_name/packageB/moduleB1.py
위의 패키지 구조에서 moduleB1이 moduleA1을 가져와야 한다고 가정해 봅시다. 그런 다음 가져오기 문은 다음과 같습니다.
from ..packageA import moduleA1
두 개의 점은 moduleB1의 위치에서 python_project_name 디렉토리로 이동한 다음 packageA로 이동하여 moduleA1을 가져와야 함을 나타냅니다.
이러한 종류의 가져오기는 짧고 가져오기 명령문의 경로를 쉽게 변경하지 않고도 최상위 프로젝트를 한 위치에서 다른 위치로 이동할 수 있습니다. 단점은 가져오기 폴더를 공유하면 경로에 약간의 수정이 있을 때 코드가 쉽게 영향을 받는다는 것입니다.