setup.cfg

setup.cfg는 파이썬 프로젝트의 설정을 관리하는 구성 파일이다.
이 파일은 INI 형식으로 작성되며, setuptools가 프로젝트를 빌드하고 배포할 때 참조하는 중요한 설정들을 포함한다.

주요 특징

  1. 선언적 구성: setup.py에서 프로그래밍 방식으로 정의하던 설정을 보다 간단하고 명확한 형식으로 선언할 수 있습니다.
  2. 정적 메타데이터: 프로젝트의 이름, 버전, 설명 등 변경이 잦지 않은 정보를 저장하는 데 적합합니다.
  3. 도구별 설정: 다양한 개발 도구들의 설정을 한 곳에서 관리할 수 있습니다.

주요 섹션

  1. [metadata]:
    프로젝트의 기본 정보를 정의한다.
    여기에는 프로젝트 이름, 버전, 작성자 정보, 라이선스 등이 포함된다.
    이 정보는 PyPI에 패키지를 등록할 때 사용되며, pip로 패키지를 설치할 때 표시되는 정보의 기반이 된다.

    1
    2
    3
    4
    5
    6
    
    [metadata]
    name = my_package
    version = 1.0.0
    description = A sample Python project
    author = John Doe
    author_email = john@example.com
    
  2. [options]:
    패키지 의존성, 포함할 패키지 등을 지정한다.
    여기서는 필요한 Python 버전, 의존성 패키지, 패키지에 포함될 파일들을 지정할 수 있다.
    options.extras_require를 통해 개발이나 문서화같은 특정 목적을 위한 추가 의존성을 정의할 수 있다.

    1
    2
    3
    4
    5
    
    [options]
    packages = find:
    install_requires =
        requests
        sqlalchemy
    
  3. [options.extras_require]: 선택적 의존성을 정의한다.

    1
    2
    3
    4
    
    [options.extras_require]
    dev =
        pytest
        flake8
    
  4. 도구별 설정 섹션
    각종 개발 도구들의 설정을 관리한다. 예를 들어:
    - pytest: 테스트 설정
    - flake8: 코드 린팅 규칙
    - mypy: 타입 체킹 설정
    - isort: 임포트 정렬 규칙
    - coverage: 코드 커버리지 측정 설정

장점

  1. 가독성: INI 형식으로 작성되어 setup.py보다 읽기 쉽고 관리하기 편하다.
  2. 중앙화된 설정: 여러 도구의 설정을 한 파일에서 관리할 수 있다.
  3. 버전 관리 용이성: 텍스트 기반 파일이므로 버전 관리 시스템과 잘 통합된다.

주의사항

  1. 동적 설정의 한계: 복잡한 로직이나 동적으로 생성되는 값은 여전히 setup.py에서 처리해야 할 수 있다.
  2. 도구 호환성: 일부 오래된 도구들은 setup.cfg를 완전히 지원하지 않을 수 있다.

참고 및 출처