부트캠프 배울때에는 os.path
로 경로를 설정했었는데, 코드리뷰를 받는 중 Pathlib
을 써보면 어떻겠냐는 말을 들었다. 그래서 알아보고자 한다.
파이썬 3.4부터 빌트인(built-in) 모듈에 포함된 pathlib으로, os.path는 이전 버전의 것이었다. 나는 파이썬 버전 3.8버전대를 쓰고 있었기 때문에 Pathlib이 더 알맞다고 생각했다.
os.path는 경로를 문자열로 다루지만, Pathlib은 경로를 객체로 다룬다.
# 기존
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
보통 이런 코드는 오른쪽에서 왼쪽으로 읽는다. (<-- 이 순서대로 보면 된다.)
위 Base_DIR은 기본 root dir을 지정하는 코드이다. 보통 manage.py가 있는 위치이다.
코드를 자세히 살펴보자면
__file__
: 현재 파일을 말한다.
os.path.abspath
: 절대 경로를 획득하겠다는 말이다. 즉, 현재 파일의 절대경로를 획득한다.
즉, /User/test/생성한 프로젝트명/settings.py가 있는 디렉토리/settings.py
을 말한다.
os.path.dirname
: settings.py이 들어있는 폴더이름을 찾겠다는 말이다. 즉, 나는 디렉토리를 3번 쌌기때문에 os.path.dirname이 3번 나오는것이다.
# python 3.4 이후
from pathlib import Path
# 기본세팅
BASE_DIR = Path(__file__).resolve().parent.parent
pathlib 모듈은 다른 운영 체제에 적합한 의미 체계를 가진 파일 시스템 경로를 나타내는 클래스를 제공한다. 코드가 실행되는 플랫폼의 구상 경로를 인스턴스화해준다.
위 코드를 보면,
__file__
: 현재 파일
Path
: 구상 경로를 객체화 하는것. 즉, 현재 파일의 경로를 객체화해서 표현
resolve
: os.path.abspath
처럼 절대경로 반환을 한다.
parent
: 부모 경로로 django 프로젝트가 생성된 위치를 표현할 때 사용하며, 나같은 경우에는 parent가 2번 쓰였으니 2번 옮겨간 위치에 django 프로젝트가 생성되었다.