소개
Python 프로그래밍 세계에서 시스템 경로를 이해하고 관리하는 것은 필요한 모듈을 찾고 활용하는 데 매우 중요합니다. 이 튜토리얼에서는 Python 시스템 경로를 확인하고, 프로젝트가 필요한 종속성에 접근할 수 있도록 수정하는 과정을 안내합니다.
Python Path 이해하기
Python path 는 sys.path라고도 하며, Python 이 모듈을 import 하려고 할 때 검색하는 디렉토리 목록입니다. 이는 Python 이 코드를 실행할 때 필요한 모듈과 패키지를 어디에서 찾을지 결정하므로 이해해야 할 중요한 개념입니다.
Python Path 란 무엇인가?
Python path 는 Python 이 모듈을 import 하려고 할 때 검색하는 디렉토리 목록입니다. Python 코드에서 모듈을 import 하면 Python 은 sys.path 목록에 지정된 디렉토리에서 해당 모듈을 찾습니다.
sys.path 목록에는 일반적으로 다음 디렉토리가 포함됩니다.
- 입력 스크립트 (실행 중인 스크립트) 가 포함된 디렉토리
PYTHONPATH환경 변수 (설정된 경우)- 표준 라이브러리 및 site-packages 에 대한 설치 종속적 기본 디렉토리.
Python 코드에서 sys.path 속성을 사용하여 현재 Python path 를 볼 수 있습니다. 이를 실제로 확인하기 위해 간단한 Python 스크립트를 만들어 보겠습니다.
WebIDE 터미널을 열고 아직 해당 디렉토리에 있지 않다면 프로젝트 디렉토리로 이동합니다. 기본 디렉토리는 /home/labex/project입니다.
이제 WebIDE 편집기를 사용하여 /home/labex/project 디렉토리에 check_path.py라는 새 파일을 만듭니다.
check_path.py 파일에 다음 코드를 추가합니다.
import sys
print(sys.path)
파일을 저장합니다.
이제 터미널에서 스크립트를 실행합니다.
python check_path.py

다음과 유사한 출력을 볼 수 있습니다.
['/home/labex/project', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/labex/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']
이 출력은 스크립트를 실행할 때 Python 이 검색한 디렉토리 목록을 보여줍니다. 첫 번째 항목은 스크립트가 있는 디렉토리 (/home/labex/project) 입니다. 다른 항목은 표준 Python 라이브러리 및 site-package 디렉토리입니다.
Python Path 의 구조 이해하기
Python path 는 디렉토리 목록으로 구성됩니다. 목록의 각 디렉토리는 Python 이 모듈과 패키지를 검색할 위치를 나타냅니다. 목록의 디렉토리 순서는 Python 이 목록에 나타나는 순서대로 디렉토리를 검색하므로 중요합니다.
예를 들어, /path/to/my/module 디렉토리에 사용자 정의 모듈이 있고 Python 코드에서 해당 모듈을 import 하려는 경우 /path/to/my/module 디렉토리가 Python path 에 포함되어 있는지 확인해야 합니다.
graph TD
A[Python Script] --> B[sys.path]
B --> C[/home/labex/project]
B --> D[/usr/lib/python3.10/site-packages]
B --> E[/usr/lib/python3.10]
B --> F[/home/labex/.local/lib/python3.10/site-packages]
위 다이어그램에서 Python 스크립트는 모듈을 import 하려고 시도하고 있으며, sys.path 목록에는 Python 이 모듈을 검색할 여러 디렉토리가 포함되어 있습니다.
site 모듈을 사용하여 Python Path 확인하기
이전 단계에서 Python 이 검색하는 디렉토리를 확인하기 위해 sys.path를 사용했습니다. Python 이 패키지, 특히 site-packages ( pip를 통해 설치된 타사 패키지) 를 찾는 위치를 이해하는 데 유용한 또 다른 모듈은 site 모듈입니다.
site.getsitepackages() 함수는 Python 이 site-packages 를 검색할 디렉토리 목록을 반환합니다.
check_path.py 스크립트를 수정하여 site 모듈도 사용해 보겠습니다.
WebIDE 편집기에서 check_path.py 파일을 엽니다.
기존 코드 뒤에 다음 줄을 스크립트에 추가합니다.
import site
print("\nsite.getsitepackages():")
print(site.getsitepackages())
완전한 check_path.py 파일은 이제 다음과 같아야 합니다.
import sys
import site
print("sys.path:")
print(sys.path)
print("\nsite.getsitepackages():")
print(site.getsitepackages())
파일을 저장합니다.
이제 터미널에서 스크립트를 다시 실행합니다.
python check_path.py
다음과 유사한 출력을 볼 수 있습니다.
sys.path:
['/home/labex/project', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/labex/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']
site.getsitepackages():
['/home/labex/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']
site.getsitepackages()의 출력이 sys.path의 디렉토리 하위 집합임을 확인하십시오. site.getsitepackages()는 특히 타사 패키지가 일반적으로 설치되는 위치를 보여줍니다.
sys.path와 site.getsitepackages()를 모두 사용하면 Python 이 시스템에서 모듈과 패키지를 검색하는 위치에 대한 더 완전한 그림을 얻을 수 있습니다.
Python Path 임시 수정하기
경우에 따라 특정 스크립트 또는 세션에 대해 Python path 에 디렉토리를 추가해야 할 수 있습니다. 이는 사용자 정의 모듈을 개발하거나 표준 Python path 에 설치되지 않은 모듈을 사용할 때 유용합니다.
sys.path.append()를 사용하여 실행 중인 스크립트 내에서 Python path 를 임시로 수정할 수 있습니다.
이를 시연하기 위해 새 디렉토리와 그 안에 간단한 모듈을 만들어 보겠습니다.
터미널에서 프로젝트 디렉토리에 my_custom_modules라는 새 디렉토리를 만듭니다.
mkdir /home/labex/project/my_custom_modules
이제 WebIDE 편집기를 사용하여 my_custom_modules 디렉토리 내에 my_module.py라는 새 파일을 만듭니다.
my_module.py에 다음 코드를 추가합니다.
def greet(name):
return f"Hello, {name} from my_module!"
파일을 저장합니다.
다음으로 /home/labex/project 디렉토리에 use_custom_module.py라는 새 Python 스크립트를 만듭니다.
use_custom_module.py에 다음 코드를 추가합니다.
import sys
import os
## Get the absolute path to the custom modules directory
custom_modules_path = os.path.join(os.path.dirname(__file__), 'my_custom_modules')
## Add the custom modules directory to sys.path
sys.path.append(custom_modules_path)
## Now you can import my_module
import my_module
message = my_module.greet("LabEx User")
print(message)
## Optional: Print sys.path again to see the added directory
print("\nUpdated sys.path:")
print(sys.path)
파일을 저장합니다.
이 스크립트에서는 먼저 os.path.join과 os.path.dirname(__file__)을 사용하여 my_custom_modules 디렉토리의 절대 경로를 구성합니다. 이렇게 하면 스크립트의 이식성이 향상됩니다. 그런 다음 sys.path.append()를 사용하여 이 디렉토리를 Python path 에 추가합니다. 디렉토리를 추가한 후 my_module을 성공적으로 import 할 수 있습니다.
터미널에서 스크립트를 실행합니다.
python use_custom_module.py
다음과 유사한 출력을 볼 수 있습니다.
Hello, LabEx User from my_module!
Updated sys.path:
['/home/labex/project', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/labex/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages', '/home/labex/project/my_custom_modules']
출력은 my_module의 greet 함수가 성공적으로 호출되었고, 이 스크립트의 실행을 위해 my_custom_modules 디렉토리가 sys.path에 추가되었음을 보여줍니다.
sys.path를 수정하는 이 방법은 임시적이며 현재 스크립트의 실행에만 영향을 미칩니다.
PYTHONPATH 를 사용하여 Python Path 영구적으로 수정하기
스크립트 내에서 sys.path를 수정하는 것은 임시 변경에 유용하지만, 개별 스크립트를 수정하지 않고 모든 Python 세션 또는 특정 프로젝트에 대해 Python path 에 디렉토리를 추가할 수 있습니다. 이는 PYTHONPATH 환경 변수를 설정하여 수행할 수 있습니다.
PYTHONPATH 환경 변수는 Python 이 시작될 때 sys.path에 추가하는 디렉토리 목록입니다.
현재 터미널 세션에 대해 PYTHONPATH 환경 변수를 설정하려면 export 명령을 사용할 수 있습니다.
use_custom_module.py에서 sys.path.append() 줄을 제거하고 대신 PYTHONPATH를 사용해 보겠습니다.
WebIDE 편집기에서 use_custom_module.py를 열고 다음 줄을 제거합니다.
## Get the absolute path to the custom modules directory
custom_modules_path = os.path.join(os.path.dirname(__file__), 'my_custom_modules')
## Add the custom modules directory to sys.path
sys.path.append(custom_modules_path)
use_custom_module.py 파일은 이제 다음과 같아야 합니다.
import sys
import os
## Now you can import my_module
import my_module
message = my_module.greet("LabEx User")
print(message)
## Optional: Print sys.path again to see the added directory
print("\nUpdated sys.path:")
print(sys.path)
파일을 저장합니다.
이제 PYTHONPATH를 설정하지 않고 스크립트를 실행해 봅니다.
python use_custom_module.py
my_module을 찾을 수 없기 때문에 ModuleNotFoundError가 발생할 가능성이 높습니다.
Traceback (most recent call last):
File "/home/labex/project/use_custom_module.py", line 5, in <module>
import my_module
ModuleNotFoundError: No module named 'my_module'
이제 터미널에서 PYTHONPATH 환경 변수를 설정하여 사용자 정의 모듈 디렉토리를 포함해 보겠습니다. /home/labex/project 디렉토리에 있는지 확인하십시오.
export PYTHONPATH="/home/labex/project/my_custom_modules:$PYTHONPATH"
이 명령은 /home/labex/project/my_custom_modules를 PYTHONPATH 변수의 시작 부분에 추가합니다. 마지막의 $PYTHONPATH는 PYTHONPATH에 기존 디렉토리가 있는 경우 이를 유지합니다.
이제 동일한 터미널 세션에서 use_custom_module.py 스크립트를 다시 실행합니다.
python use_custom_module.py
모듈이 발견되어 실행되었음을 나타내는 출력을 볼 수 있습니다.
Hello, LabEx User from my_module!
Updated sys.path:
['/home/labex/project', '/home/labex/project/my_custom_modules', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/labex/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']
PYTHONPATH 환경 변수를 설정했기 때문에 /home/labex/project/my_custom_modules가 이제 sys.path에 포함되어 있음을 확인하십시오.
export를 사용하여 터미널에서 PYTHONPATH를 설정하면 현재 터미널 세션에만 영향을 미칩니다. 변경 사항을 영구적으로 적용하려면 일반적으로 셸의 시작 파일 (예: ~/.bashrc, ~/.zshrc) 에 export 명령을 추가합니다. 그러나 이 랩에서는 현재 세션에서 설정하는 것만으로 개념을 시연하기에 충분합니다.
요약
이 랩에서는 Python 시스템 경로 (sys.path) 를 확인하고 수정하는 방법을 배웠습니다. sys.path와 site.getsitepackages()를 사용하여 Python 이 모듈을 검색하는 디렉토리를 검사했습니다. 또한 Python path 에 디렉토리를 추가하는 두 가지 방법을 배웠습니다. sys.path.append()를 사용하여 스크립트 내에서 임시로 추가하는 방법과 PYTHONPATH 환경 변수를 사용하여 세션 동안 더 영구적으로 추가하는 방법입니다. Python path 를 이해하고 관리하는 것은 Python 프로젝트를 구성하고 코드가 필요한 모듈과 패키지를 찾을 수 있도록 하는 기본적인 기술입니다.



