Pre-commit 패키지?
pre-commit은 Git 저장소에서 커밋을 수행하기 전에 코드 품질을 보장하고 코드 스타일을 일관되게 유지할 수 있도록 도와주는 도구입니다. 이 패키지는 Git의 훅(hook) 시스템을 활용하여 커밋 전 다양한 자동화 작업을 실행할 수 있게 해줍니다. 이를 통해 코드의 품질을 유지하고, 협업 시 코드 스타일의 일관성을 보장할 수 있습니다.
주요 기능은 아래와 같습니다.
- 자동화된 코드 검사 및 포매팅: 코스 스타일을 검사하는 테스트입니다. 협업시 꽤 유용합니다.
- 다양한 훅(hook): hook은 스크립트나 명령어를 의미합니다. 여러가지 검사방법을 적용해볼 수 있습니다.
- 확장성: `pre-commit-config.yaml`을 변경하여 훅을 추가/제거 할 수 있습니다.
Pre-commit 패키지 설치방법
1. `pip`을 이용한 설치
$ pip install pre-commit
$ pre-commit --version # pre-commit 이 올바르게 설치되어있나 버전확인
2. configuration 세팅
- `.pre-commit-config.yaml`이라는 파일을 만듭니다.
$ touch .pre-commit-config.yaml
- pre-commit config의 예시 포맷을 출력해봅니다. config의 상세한 https://pre-commit.com/#plugins 에서 더 추가로 찾을 수 있습니다. 예를 들어, 어떤 파일만 검사할것인디 `files`라는 옵션, 기본언어 ` default_language_version` 등을 추가로 넣을 수 있습니다. 그 외의 훅은 https://pre-commit.com/hooks.html에서 찾을 수 있습니다.
$ pre-commit sample-config
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
위 내용을 `.pre-commit-config.yaml`에 작성하고 저장하면 됩니다.
3. git hook script설치
pre-commit은 git의 hook시스템을 사용하하기 때문에 설치가 `.git/hooks`이하에 저장됩니다.
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit
4. 실행: 아래와 같이 whitespace가 있는지 등을 알아서 검사해주고 ,문제가 있는 경우 exit code 1을 반환합니다.
$ pre-commit run --all-files
[INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
Trim Trailing Whitespace.................................................Failed
- hook id: trailing-whitespace
- exit code: 1
- files were modified by this hook
Fixing notebooks/publications/figure1.sh
Fixing README.md
Fixing tiling_version17.py
Fix End of Files.........................................................Failed
- hook id: end-of-file-fixer
- exit code: 1
- files were modified by this hook
Fixing .gitignore
Fixing notebooks/publications/figure1.sh
Check Yaml...........................................(no files to check)Skipped
Check for added large files..............................................Passed
Pre-commit 패키지 언제 사용해야하나?
- Python 코드 포맷팅이 사람마다 다를 때: black 같은 코드 포맷터를 사용해 커밋 전에 코드를 자동으로 포맷팅.
- 정적 코드 분석: flake8을 사용해 코드 내 잠재적인 오류나 스타일 위반 사항을 검사.
- 보안 검사: bandit 같은 도구를 사용해 보안 관련 잠재적 취약점을 사전에 검사.
반응형
'Data science > MLOps' 카테고리의 다른 글
[MLOps] 디자인 패턴 (0) | 2024.08.26 |
---|---|
nvidia-driver, cuda toolkit update (0) | 2024.05.03 |
API token bucket: API 요청수 관리 (0) | 2024.04.08 |
pip install -e 옵션에 대해 (0) | 2024.04.02 |
[mlflow] child run id 조회하기 (0) | 2023.09.25 |