절대경로: root부터 해당 파일까지의 전체 경로(URL)를 의미한다.즉, import 하는 파일이나 경로에 상관없이 항상 경로가 동일하다. 대신 경로가 길어지는 단점이 있다. ex) /home/user/documents/file.txt
상대경로: 현재 작업 디렉토리를 기준으로 파일이나 디렉토리의 위치를 나타낸다.import 하는 위치를 기준으로 경로를 정의한다. 주로 local package 안에서 다른 local package 로 import 할 때 사용한다.
ex) documents/file.txt
차이 : 파일 시스템의 루트 디렉토리에서 시작하여 전체 경로를 제공하느냐, 현재 작업 디렉토리를 기준으로만 경로를 제공하느냐 차이
기존 내 문제점을 해결하기 위해서 상대경로를 사용했다. 코드에서 파일 경로를 지정할 대 상대경로를 사용하여 프로젝트의 루트 디렉토리를 기준으로 파일을 찾도록 한다. 예를 들어, os.path 모듈을 사용하여 현재 스크립트의 디렉토리를 기준으로 상대경로를 계산할 수 있다.
또 한 방법으로는 argparse 사용을 하라고 배웠다. 사용자에게 파일 경로를 직접 입력받도록 함으로써 파일 경로 문제를 해결한다. 파일경로를 인자로 전달받아 처리할 수 있다. 호출 당시 인자값을 줘서 동작을 다르게 하고 싶을 때!!!!
import argparse
import os
#ArgumentParser 객체 생성
parser = argparse.ArgumentParser(description='파일 경로를 입력받는 스크립트')
#입력받을 인자 추가
parser.add_argument('file_path', type=str, help='읽을 파일의 경로')
args = parser.parse_args()
file_path = args.file_path
𝟭. 𝗴𝗶𝘁 𝗱𝗶𝗳𝗳: Show file differences not yet staged.
𝟮. 𝗴𝗶𝘁 𝗰𝗼𝗺𝗺𝗶𝘁 -𝗮 -𝗺 "𝗰𝗼𝗺𝗺𝗶𝘁 𝗺𝗲𝘀𝘀𝗮𝗴𝗲": Commit all tracked changes with a message.
𝟯. 𝗴𝗶𝘁 𝘀𝘁𝗮𝘁𝘂𝘀: Show the state of your working directory.
𝟰. 𝗴𝗶𝘁 𝗮𝗱𝗱 𝗳𝗶𝗹𝗲𝗽𝗮𝘁𝗵:Add file(s) to the staging area.
𝟱. 𝗴𝗶𝘁 𝗰𝗵𝗲𝗰𝗸𝗼𝘂𝘁 -𝗯 𝗯𝗿𝗮𝗻𝗰𝗵𝗻𝗮𝗺𝗲: Create and switch to a new branch.
𝟲. 𝗴𝗶𝘁 𝗰𝗵𝗲𝗰𝗸𝗼𝘂𝘁 𝗯𝗿𝗮𝗻𝗰𝗵𝗻𝗮𝗺𝗲: Switch to an existing branch.
𝟳. 𝗴𝗶𝘁 𝗰𝗼𝗺𝗺𝗶𝘁 --𝗮𝗺𝗲𝗻𝗱:Modify the last commit.
𝟴. 𝗴𝗶𝘁 𝗽𝘂𝘀𝗵 𝗼𝗿𝗶𝗴𝗶𝗻 𝗯𝗿𝗮𝗻𝗰𝗵𝗻𝗮𝗺𝗲: Push a branch to a remote.
𝟵. 𝗴𝗶𝘁 𝗽𝘂𝗹𝗹: Fetch and merge remote changes.
𝟭𝟬. 𝗴𝗶𝘁 𝗿𝗲𝗯𝗮𝘀𝗲 -𝗶: Rebase interactively, rewrite commit history.
𝟭𝟭. 𝗴𝗶𝘁 𝗰𝗹𝗼𝗻𝗲: Create a local copy of a remote repo.
𝟭𝟮. 𝗴𝗶𝘁 𝗺𝗲𝗿𝗴𝗲: Merge branches together.
𝟭𝟯. 𝗴𝗶𝘁 𝗹𝗼𝗴 --𝘀𝘁𝗮𝘁: Show commit logs with stats.
𝟭𝟰. 𝗴𝗶𝘁 𝘀𝘁𝗮𝘀𝗵: Stash changes for later.
𝟭𝟱. 𝗴𝗶𝘁 𝘀𝘁𝗮𝘀𝗵 𝗽𝗼𝗽: Apply and remove stashed changes.
𝟭𝟲. 𝗴𝗶𝘁 𝘀𝗵𝗼𝘄 𝗰𝗼𝗺𝗺𝗶𝘁𝗶𝗱: Show details about a commit.
𝟭𝟳. 𝗴𝗶𝘁 𝗿𝗲𝘀𝗲𝘁 𝗛𝗘𝗔𝗗~𝟭: Undo the last commit, preserving changes locally.
𝟭𝟴. 𝗴𝗶𝘁 𝗳𝗼𝗿𝗺𝗮𝘁-𝗽𝗮𝘁𝗰𝗵 -𝟭 𝗰𝗼𝗺𝗺𝗶𝘁𝗶𝗱: Create a patch file for a specific commit.
𝟭𝟵. 𝗴𝗶𝘁 𝗮𝗽𝗽𝗹𝘆 𝗽𝗮𝘁𝗰𝗵𝗳𝗶𝗹𝗲𝗻𝗮𝗺𝗲: Apply changes from a patch file.
𝟮𝟬. 𝗴𝗶𝘁 𝗯𝗿𝗮𝗻𝗰𝗵 -𝗗 𝗯𝗿𝗮𝗻𝗰𝗵𝗻𝗮𝗺𝗲: Delete a branch forcefully.
𝟮𝟭. 𝗴𝗶𝘁 𝗿𝗲𝘀𝗲𝘁: Undo commits by moving branch reference.
𝟮𝟮. 𝗴𝗶𝘁 𝗿𝗲𝘃𝗲𝗿𝘁: Undo commits by creating a new commit.
𝟮𝟯. 𝗴𝗶𝘁 𝗰𝗵𝗲𝗿𝗿𝘆-𝗽𝗶𝗰𝗸 𝗰𝗼𝗺𝗺𝗶𝘁𝗶𝗱: Apply changes from a specific commit.
𝟮𝟰. 𝗴𝗶𝘁 𝗯𝗿𝗮𝗻𝗰𝗵: Lists branches.
𝟮𝟱. 𝗴𝗶𝘁 𝗿𝗲𝘀𝗲𝘁 --𝗵𝗮𝗿𝗱: Resets everything to a previous commit, erasing all uncommitted changes.
결론적으로 필요한 함수만 명시적으로 가져오는 방법이 훨씬 좋다.
# __init__.py
from .eda_utils import (
get_table_info,
color_table_by_column_unique_values,
data_col_overview,
read_csv,
fill_unknown_values,
apply_color,
)
# main.py
from utils import get_table_info, read_csv
df = read_csv('my_file')
print(get_table_info('my_table', engine))
utils/
├── __init__.py
├── eda_utils.py # EDA 관련 유틸리티
├── database_utils.py # 데이터베이스 관련 유틸리티
├── plot_utils.py # 시각화 관련 유틸리티
# __init__.py
from .eda_utils import get_table_info, read_csv # 자주 사용하는 함수만 추가
from utils.eda_utils import fill_unknown_values
최종 구조 예시
project/
├── main.py # Main script
├── utils/ # Utility package
│ ├── __init__.py # Package initializer
│ ├── eda_utils.py # EDA utilities
│ ├── database_utils.py # Database utilities
│ ├── plot_utils.py # Visualization utilities
└── data/ # Data folder
└── my_file.csv # Example data file
차이점
from .eda_utils import read_csv
from utils.eda_utils import read_csv
- 패키지 내부에서 모듈 간 참조에는 상대 경로(.)를 사용하는 것이 적합합니다.
- 프로젝트 루트에서 임포트하거나 외부 스크립트에서 사용할 경우 절대 경로(utils.eda_utils)를 사용하는 것이 더 명확하고 관리하기 쉽습니다.