Backend

python pre-commit Git Hook / flake8 / pytest / PEP8, python pre-commit python path error

뒷골목프로그래머 2023. 2. 15. 21:30
반응형

안녕하세요. 글쓰는 개발자 입니다.

 

 원활한 협업을 위해 필요한 pre-commit 적용기를 소개합니다. 프로젝트를 리딩하면서 제가 꼭 하고 싶었던 코드 리뷰를 도입하고 실제로 활발히 진행 중입니다. 그런데 로직보다 PEP8에 맞지 않는 code convention check에 많은 시간이 소요된다는 것을 알게 되었습니다. 그래서 예전부터 적용해야겠다고 생각한 Git Hook 을 사용하여 pre-commit을 적용하였고 코드 리뷰 시, 조금 더 코드 구조와 로직에 집중할 수 있게되었습니다. 그럼 python backend (FastAPI) 환경에 어떻게 pre-commit을 적용했는 지 소개하겠습니다.

2023. 2. 16(목) 추가 내용 : 3. Windows 환경에서 적용 불가 에러 해결 (아래 링크)

-> 야심차게 pre-commit을 적용했지만, 개인 PC를 사용해 업무를 수행하는 환경을 너무 얕잡아 보았습니다.

https://backstreet-programmer.tistory.com/191

 

solved! windows python pre-commit error

Windows 환경에서 적용 불가 에러 해결 야심차게 Pre-commit을 잘 적용했고 동료들이 잘 썼지만 변수가 하나 있었습니다. 바로 Windows PC를 사용하는 환경에서는 pre-commit을 제대로 수행 할 수 없었습니

backstreet-programmer.tistory.com

 

목차

1. pre-commit

2. 적용

1. pre-commit

 flake8 과 pytest 두 가지를 pre-commit에 적용했습니다. 

 

2. 적용 

1) pre-commit 설치

pip install pre-commit

 

2) menifeset 작성

project root 에 .pre-commit-config.yaml 파일을 생성하고 아래와 같이 작성합니다. default 값 중에서 max-line-length 를 120으로 변경하여 적용했습니다.

repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v1.2.3
    hooks:
    - id: flake8
      args:
        - "--max-line-length=120"
- repo: local
  hooks:
    - id: pytest-check
      name: pytest-check
      entry: pytest -s
      language: system
      pass_filenames: false
      always_run: true

 

3) pytest.ini 생성

 pytest 실행 시 module 경로를 찾지 못해 바생하는 'module not found error' 를 해결하기 위해 project root에 pytest.ini 파일을 아래와 같이 생성 합니다.

[pytest]
pythonpath = . app

#### project structure ####
# app                     #
# └── src                 #
# └── tests               #
###########################

 

4) commit 시 자동 실행

pre-commit install

 

 pre-commit 을 적용한 덕분에 동료 개발자들에게 '제발 없애면 안되겠냐. commit이 안되니 너무 힘들다.' 는 푸념을 들을 때 마다 싱글벙글하고 뿌듯합니다. 그래도 동료들도 점점 깔끔한 코드를 만드는 습관을 갖게 되고 점점 클린 코드의 필요성을 공감해주어 몹시 기쁜 요즘입니다. 혹시, 개발 체계가 없는 곳에서 고군분투 하고 있는 누군가에게 이 글이 도움되었으면 좋겠습니다.

반응형