Pre-commit 패키지?

pre-commit은 Git 저장소에서 커밋을 수행하기 전에 코드 품질을 보장하고 코드 스타일을 일관되게 유지할 수 있도록 도와주는 도구입니다. 이 패키지는 Git의 훅(hook) 시스템을 활용하여 커밋 전 다양한 자동화 작업을 실행할 수 있게 해줍니다. 이를 통해 코드의 품질을 유지하고, 협업 시 코드 스타일의 일관성을 보장할 수 있습니다.

주요 기능은 아래와 같습니다.

  1. 자동화된 코드 검사 및 포매팅: 코스 스타일을 검사하는 테스트입니다. 협업시 꽤 유용합니다.
  2. 다양한 훅(hook): hook은 스크립트나 명령어를 의미합니다. 여러가지 검사방법을 적용해볼 수 있습니다.
  3. 확장성: `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 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 패키지 언제 사용해야하나?

 

  1. Python 코드 포맷팅이 사람마다 다를 때: black 같은 코드 포맷터를 사용해 커밋 전에 코드를 자동으로 포맷팅.
  2. 정적 코드 분석: flake8을 사용해 코드 내 잠재적인 오류나 스타일 위반 사항을 검사.
  3. 보안 검사: 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

+ Recent posts