소개
이 랩에서는 Python 모듈이 특정 경로에서 import 되었는지 확인하는 방법을 배우게 됩니다. 이 랩은 모듈 경로와 Python 이 sys.path를 사용하여 모듈을 검색하는 방법에 중점을 둡니다.
먼저 sys.path를 탐색하여 Python 이 모듈을 찾기 위해 사용하는 디렉토리 목록을 확인합니다. 그런 다음, 간단한 모듈과 이를 import 하는 메인 스크립트를 생성하여 모듈의 위치를 결정하고 예상 경로와 비교하기 위해 모듈의 __file__ 속성에 접근하는 방법을 배우게 됩니다. 이를 통해 Python 프로젝트에서 import 된 모듈의 소스를 확인할 수 있습니다.
모듈 경로 이해
이 단계에서는 Python 이 모듈 경로를 처리하는 방법과 모듈 파일의 위치를 결정하는 방법을 배우게 됩니다. 모듈 경로를 이해하는 것은 Python 프로젝트를 관리하고 구성하는 데 매우 중요합니다.
Python 은 모듈을 import 할 때 모듈을 검색하기 위해 디렉토리 목록을 사용합니다. 이 목록은 sys.path 변수에 저장됩니다. 이 경로를 보고 이해하는 방법을 살펴보겠습니다.
LabEx 환경에서 VS Code 편집기를 엽니다.
~/project디렉토리에module_path.py라는 새 파일을 생성합니다.import sys print(sys.path)이 스크립트는
sys모듈을 import 한 다음sys.path의 값을 출력합니다.sys.path는 디렉토리 경로의 목록입니다.터미널에서 다음 명령을 사용하여 스크립트를 실행합니다.
python module_path.py터미널에 디렉토리 경로 목록이 출력됩니다. 이것이 Python 이 모듈을 검색하는 순서입니다. 출력 결과는 다음과 유사합니다.
['/home/labex/project', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']목록의 첫 번째 경로는
/home/labex/project로, 현재 작업 디렉토리입니다. 즉, Python 은 먼저 스크립트를 실행하는 디렉토리에서 모듈을 찾습니다.다른 경로는 Python 라이브러리가 설치된 시스템 디렉토리입니다.
이제 간단한 모듈을 생성하고 Python 이 이를 찾는 방법을 살펴보겠습니다.
~/project디렉토리에my_module.py라는 새 파일을 생성합니다.def my_function(): return "Hello from my_module!"이 모듈은
my_function이라는 단일 함수를 정의합니다.~/project디렉토리에main.py라는 다른 파일을 생성합니다.import my_module result = my_module.my_function() print(result)이 스크립트는
my_module모듈을 import 하고my_function함수를 호출합니다.main.py스크립트를 실행합니다.python main.py다음 출력을 볼 수 있습니다.
Hello from my_module!이는
my_module모듈이main.py스크립트와 동일한 디렉토리에 있기 때문에 Python 이my_module모듈을 찾아서 import 할 수 있었음을 보여줍니다.main.py스크립트는sys.path에 있습니다.
file 속성 접근
이 단계에서는 Python 에서 __file__ 속성에 접근하는 방법을 배우게 됩니다. __file__ 속성은 모듈이 로드된 파일의 경로를 제공합니다. 이는 코드의 위치를 결정하고 상대 경로로 작업하는 데 유용합니다.
LabEx 환경에서 VS Code 편집기를 엽니다.
~/project디렉토리의my_module.py파일을 수정하여 다음 코드를 포함합니다.def my_function(): return "Hello from my_module!" print(f"The location of my_module is: {__file__}")이제 이 스크립트는
__file__속성의 값을 출력합니다.main.py스크립트를 다시 실행합니다.python main.py다음과 유사한 출력을 볼 수 있습니다.
The location of my_module is: /home/labex/project/my_module.py Hello from my_module!첫 번째 줄은
my_module.py파일의 절대 경로를 보여줍니다. 이것이__file__속성의 값입니다.참고:
__file__속성은 모듈이 zip 아카이브의 일부이거나 대화형 인터프리터에서 직접 실행되는 경우와 같이, 상대 경로를 표시하거나 사용할 수 없는 경우가 있을 수 있습니다.__file__을 더 자세히 탐구하기 위해 하위 디렉토리에 다른 모듈을 생성해 보겠습니다.~/project디렉토리 내에utils라는 새 디렉토리를 생성합니다.mkdir ~/project/utils~/project/utils디렉토리 내에helper.py라는 새 파일을 생성합니다.def helper_function(): return "Hello from helper!" print(f"The location of helper is: {__file__}")main.py파일을 수정하여helper.py모듈을 import 하고 사용합니다.import my_module from utils import helper result_my_module = my_module.my_function() print(result_my_module) result_helper = helper.helper_function() print(result_helper)main.py스크립트를 실행합니다.python main.py다음과 유사한 출력을 볼 수 있습니다.
The location of my_module is: /home/labex/project/my_module.py Hello from my_module! The location of helper is: /home/labex/project/utils/helper.py Hello from helper!이는
__file__이 프로젝트 구조 내의 위치에 관계없이 각 모듈의 경로를 제공하는 방법을 보여줍니다.
예상 경로와 비교
이 단계에서는 __file__ 속성을 예상 경로와 비교하여 스크립트가 올바른 위치에서 실행되고 있는지 확인하는 방법을 배우게 됩니다. 이는 환경을 검증하고 잘못된 파일 경로로 인한 오류를 방지하는 데 유용합니다.
LabEx 환경에서 VS Code 편집기를 엽니다.
~/project디렉토리의my_module.py파일을 수정하여 예상 경로와의 비교를 포함합니다.import os def my_function(): return "Hello from my_module!" expected_path = os.path.abspath(__file__) current_path = os.path.abspath("/home/labex/project/my_module.py") if expected_path == current_path: print("The script is running from the expected location.") else: print(f"The script is running from an unexpected location: {__file__}") print(f"Expected location: {current_path}") print(f"The location of my_module is: {__file__}")이제 이 스크립트는
__file__의 절대 경로를 예상 절대 경로/home/labex/project/my_module.py와 비교합니다.os.path.abspath()를 사용하여 두 경로가 모두 절대 경로가 되도록 하여 비교의 신뢰성을 높입니다.main.py스크립트를 다시 실행합니다.python main.py다음과 유사한 출력을 볼 수 있습니다.
The script is running from the expected location. The location of my_module is: /home/labex/project/my_module.py Hello from my_module! The location of helper is: /home/labex/project/utils/helper.py Hello from helper!스크립트가 예상 위치에서 실행되면 "The script is running from the expected location."을 출력합니다. 그렇지 않으면 실제 위치와 예상 위치를 출력합니다.
"예상치 못한 위치" 시나리오를 테스트하려면
my_module.py파일을 다른 디렉토리로 임시로 이동하고main.py를 다시 실행할 수 있습니다. 그러나 이 랩의 목적을 위해 파일이 올바른 위치에 있다고 가정합니다.중요: 실제 시나리오에서는 이 기술을 사용하여 스크립트가 올바른 환경에서 실행되고 있는지 확인하고 스크립트가 예상치 못한 위치에서 실행되는 경우를 처리합니다.
요약
이 랩에서는 Python 이 모듈 경로를 처리하는 방법과 모듈 파일의 위치를 결정하는 방법을 배웠습니다. 모듈을 import 할 때 Python 이 검색하는 디렉토리 목록을 포함하는 sys.path 변수를 살펴보았습니다. sys.path를 출력하는 스크립트를 생성하고 Python 이 모듈을 검색하는 순서를 관찰했으며, 현재 작업 디렉토리부터 시작했습니다.
또한 my_module.py라는 간단한 모듈을 생성하고 main.py로 import 했습니다. 이는 Python 이 정의된 검색 경로 내에서 모듈을 찾고 import 하는 방법을 보여주었습니다.



