반응형
참고) 컴퓨터 파일 시스템은 하나의 루트 디렉터리로부터 뻗어나가는 식으로 파일이 구성되어 있다.
1. os.getcwd() 사용 (현재 작업 디렉터리 기준)
가장 간단한 방법은 os.getcwd() 함수를 사용하는 것. 이 함수는 현재 파이썬 스크립트가 실행되는 작업 디렉터리를 반환한다. 하지만 이 방법은 항상 프로젝트 루트 디렉터리를 반환한다고 보장할 수 없다. 왜냐하면 사용자가 스크립트를 실행하는 위치에 따라 결과가 달라질 수 있기 때문이다.
import os
root_dir = os.getcwd()
print(f"현재 작업 디렉터리: {root_dir}")
2. os.path.dirname(__file__) 사용 (스크립트 파일 기준)
__file__ 변수는 현재 실행 중인 스크립트 파일의 경로를 나타낸다. os.path.dirname(__file__) 함수는 이 경로에서 디렉터리 부분만 추출하여 반환한다. 이 방법은 스크립트 파일이 프로젝트 루트 디렉터리 바로 아래에 위치하는 경우에 유용하다.
import os
script_dir = os.path.dirname(__file__)
print(f"스크립트 디렉터리: {script_dir}")
3. 프로젝트 루트 디렉터리 명시 (가장 확실한 방법)
가장 확실한 방법은 프로젝트 루트 디렉터리를 명시적으로 지정하는 것이다. 프로젝트의 시작점(예: main.py)에 다음과 같이 루트 디렉터리를 정의하고, 이 변수를 사용하여 다른 파일의 경로를 참조할 수 있다.
import os
PROJECT_ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) # 스크립트가 루트 디렉터리에 있다면
#PROJECT_ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 스크립트가 한 단계 아래에 있다면
print(f"프로젝트 루트 디렉터리: {PROJECT_ROOT_DIR}")
# 다른 파일 경로 참조 예시
# config_path = os.path.join(PROJECT_ROOT_DIR, 'config.ini')
- os.path.abspath(__file__): 현재 스크립트 파일의 절대 경로를 반환
- os.path.dirname(): 주어진 경로의 디렉터리 부분을 반환
- os.path.join(): 경로를 안전하게 결합
만약 main.py 파일이 프로젝트 루트 디렉터리의 하위 디렉터리에 있다면, os.path.dirname()을 여러 번 사용하여 루트 디렉터리를 찾을 수 있다.
4. 프로젝트 설정 파일 검색 (고급 방법)
프로젝트 루트 디렉터리에 특정 파일(예: setup.py, pyproject.toml, .git)이 존재한다는 것을 알고 있다면, 해당 파일을 검색하여 루트 디렉터리를 찾을 수 있다.
import os
def find_project_root(path):
"""프로젝트 루트 디렉터리를 찾습니다."""
current_dir = path
while True:
if os.path.exists(os.path.join(current_dir, 'pyproject.toml')):
return current_dir
parent_dir = os.path.dirname(current_dir)
if parent_dir == current_dir:
return None # 루트 디렉터리에 도달
current_dir = parent_dir
# 현재 스크립트 파일의 디렉터리에서 시작
project_root = find_project_root(os.path.dirname(os.path.abspath(__file__)))
if project_root:
print(f"프로젝트 루트 디렉터리: {project_root}")
else:
print("프로젝트 루트 디렉터리를 찾을 수 없습니다.")
어떤 방법을 선택해야 좋을까?
- 가장 간단하고 일반적인 경우: os.path.dirname(__file__) 또는 명시적으로 루트 디렉터리를 지정하는 방법을 사용
- 프로젝트 구조가 복잡하거나 유연성이 필요한 경우: 프로젝트 설정 파일 검색 방법을 사용
반응형
'Python' 카테고리의 다른 글
pip3와 pip의 차이점 (pip3 install google-generativeai) (1) | 2025.03.17 |
---|---|
파이썬 개발 환경에서 콘다를 사용하는 이유 (0) | 2025.03.17 |
파이썬 루트 디렉터리란? (0) | 2025.03.17 |
.env 파일에 환경 변수를 등록하는 방법? (0) | 2025.03.17 |
파이썬 환경에서 제미나이 (gemini) API 활용하기 (0) | 2025.03.17 |