Python co-operation tools


2 분 소요

pre-commit

git commit 사용 전에 발동하는 hooking tool. commit 시 coding style을 통일하거나, linter 실행을 위해 사용.

install

$ pip install pre-commit # python이 있으면

Usage

설정파일 생성

pre-commit sample-config > .pre-commit-config.yaml

기본 설정

# 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
  • trailing-whitespace: 불필요한 공백 제거
  • end-of-file-fixer: 파일 끝 개행 제거
  • check-yaml: yaml 문법 체크
  • check-added-large-files: 큰 파일 add 체크
    • github 등의 경우 대용량 파일을 업로드 할 수 없음
    • git-lfs 사용

실행

$ pre-commit run

staging area에 있는 파일들에 대하여 체크를 진행, 자동으로 hook 프로그램 실행.

자동화

$ pre-commit install

git commit 수행 시 자동으로 동작시켜줌.

image

업데이트

$ pre-commit autoupdate

hook repository의 버전 업데이트

Black

코드 포맷터. 개발자들간에 서로 다른 코드 포맷을 거부하고, 일관성 있게 변경하는 도구.

Install

$ pip install black

Usage

$ black {FILENAME}

Options

  • --check: 실제로 변경하기 싫고, check만 하고 싶을 때 사용

pre-commit 설정

repos:
  - repo: https://github.com/psf/black
    rev: stable
    hooks:
      - id: black

Pylint

Python 코드의 에러를 확인하고, 표준을 적용시키는 도구. 코드에서 구릿구릿한 냄새가 나면 지적질 해주고, 꼬라지를 점수로 평가한다.

Usage

$ pylint {FILENAME}

Options

.pylintrc에 옵션을 추가할 수 있음.

$ pylint --generate-rcfile > .pylintrc

rc파일을 생성함. 옵션을 커스터마이징 할 수 있음. 옵션 내용은 여기서 확인.

pre-commit 설정

repos:
  - repo: local
    hooks:
      - id: pylint
        name: pylint
        entry: pylint
        language: system
        types: [python]
        require_serial: true

원격 repo에 있는 pylint는 로컬 라이브러리(패키지)에 접근할 수 없어서 import 에러가 발생. 때문에, pylint를 로컬에 설치하고, 로컬 pylint를 pre-commit에 설정해주는 방식으로 사용해야 함.

flake8

python 코드 체크 툴. 다음과 같은 것들로 이루어져 있다.

  • PyFlakes: 코드의 에러 체크(pyflake)
  • pycodestyle: PEP8에 준거하고 있는지를 체크(pycodestyle)
  • Ned Batchelder’s McCabe Script: 순환 복잡도를 체크(mccabe)

Usage

$ flake8 {FILENAME}

Ignoring Error

  • # noqa: {error[,error...]}: 해당 라인을 스킵
  • # flake8: noqa: 해당 파일 전체를 스킵

pre-commit 설정

repos:
  - repo: https://github.com/PyCQA/flake8
    rev: 5.0.4
    hooks:
      - id: flake8

isort

import 패키지 순서를 맞춰줌. 표준 패키지, 서브파티 패키지, 사용자 패키지 순서 및 알파벳 순서.

Usage

$ isort {FILENAME}

Skip

  • # isort:skip: 해당 라인을 스킵
  • """ isort:skip_file """: module doc string에 삽입 시 파일 전체를 스킵

pre-commit 설정

repos:
  - repo: https://github.com/PyCQA/isort
    rev: 5.10.1
    hooks:
      - id: isort

mypy

Static Type Checker. 일반적으로 typing 라이브러리와 함께 사용한다.

https://mypy.readthedocs.io/en/stable/cheat_sheet_py3.html

vim 플러그인도 있음.

Usage

$ mypy {FILENAME}

Ignoring

  • # type: ignore: import 패키지의 타입체크 스킵

pre-commit 설정

repos:
  - repo: local
    hooks:
      - id: mypy
        name: mypy
        entry: mypy
        language: system
        types: [python]
        require_serial: true

mypy 또한 외부 패키지를 이용하므로, 설치된 로컬 패키지를 접근하기 위해, 원격이 아닌 로컬의 mypy를 사용해야한다.

관련 내용에 대한 질문이나 태클을 환영합니다. 댓글 남겨주세요.



태그: , , ,

카테고리:

작성:

업데이트:

댓글남기기