[ros2] setup.py와 setup.cfg

About_work·2024년 3월 5일
0

ros2

목록 보기
28/41

setup.py와 setup.cfg 의 사용처

  • 사용처 1: colcon 기반 패키지 빌드/설치
    • Python 기반의 ROS2 패키지에 대해 colconsetup.cfg (및 setup.py)를 사용하여 패키지의 설치를 처리
    • setup.cfg/setup.pysetuptools를 통해 패키지를 빌드하고 설치하는 방법에 대한 구성 정보를 제공
    • ament_python 패키지 빌드 타입을 사용하는 경우, 이 파일의 설정이 빌드 과정에 영향을 줄 수 있음
  • 사용처 2: pip 기반 package 설치

  • 이전에는 setup.py 파일이 필수였지만, 최신 setuptools에서는 setup.cfg만 있어도 충분히 작동합니다.
  • 그러나 아직 setup.py가 필요한 상황(예: 특정 환경에서의 호환성)이 있을 수 있으므로, 최소한의 setup.py를 포함하는 것이 좋습니다.

개요

  • setup.py와 setup.cfg는 Python 패키지 빌드/설치/배포를 위한 설정 파일

차이점 요약

  • 접근 방식:
    • setup.py는 프로그래밍 방식으로 패키지 설정을 제공
    • setup.cfg는 선언적 방식으로 설정을 제공
  • 유연성:
    • setup.py: 동적 계산과 사용자 정의 명령어를 지원하는 높은 유연성을 제공
    • setup.cfg: 보다 간단하고 명확한 패키지 설정을 지향
  • 사용 추세:
    • 현대의 Python 패키징은 setup.cfg를 통한 선언적 패키지 설정을 선호하며,
    • 가능한 경우 setup.py 파일을 최소화하거나 제거하는 방향으로 이동하고 있음

setup.py

  • 프로그래매틱 접근:
    • setup.py는 Python 스크립트 파일로, 패키지의 메타데이터와 설치 설정을 프로그래밍 방식으로 정의
    • 이는 setuptools.setup() 함수 호출을 통해 이루어지며,
    • 여기에는 패키지 이름, 버전, 의존성 등 다양한 인자를 동적으로 계산하거나 조건부 로직을 적용할 수 있는 유연성
  • 직접 실행 가능:
    • python setup.py <command> 형식의 명령어를 통해 직접 실행할 수 있음
    • 여기서 <command>는 install, bdist_wheel, sdist 등 패키지를 빌드하거나 설치하는 데 사용되는 다양한 명령어가 가능
      • python setup.py install 대신, pip install . 을 써라.
  • 사용자 정의 명령 지원:
    • 사용자가 필요에 따라 setuptools의 명령 확장 기능을 사용하여 새로운 명령어를 정의할 수 있습니다.

setup.cfg

  • 선언적 접근:
    • setup.cfg는 INI 포맷의 구성 파일로, 패키지의 설정을 선언적으로 정의
    • 이 파일에서는 패키지의 메타데이터와 옵션을 보다 단순하고 명확한 형식으로 지정
    • setup.cfg는 setup.py에 비해 정적인 설정에 더 적합하며, 조건부 로직이나 복잡한 계산을 포함할 수 없습니다.
  • 간소화된 설정:
    • 최근의 Python 패키징 가이드라인은 setup.cfg 파일을 사용하여 패키지 설정을 최대한 간소화하고,
    • setup.py 파일을 최소화하거나 완전히 제거할 수 있도록 권장하고 있습니다.
    • 이를 통해 패키지의 구성이 더 읽기 쉽고 관리하기 쉬워집니다.
  • setup.py와의 결합 사용:
    • setup.cfg를 사용하는 경우에도 setup.py 파일이 여전히 필요할 수 있습니다.
    • 예를 들어, setuptools를 사용하여 패키지를 빌드하는 명령어를 실행할 때 기본적인 setup.py 파일이 사용됩니다.
    • 하지만, setup.py 파일은 매우 간단하게 유지되며, 대부분의 설정은 setup.cfg에서 관리됩니다.

Programmatic Approach VS Declarative Approach

  • 프로그래매틱 접근: 동적으로 설정을 생성하고 조정할 수 있는, 프로그래밍 기능을 활용한 접근 방식입니다.
  • 선언적 접근: 원하는 최종 상태나 결과를 명시적으로 선언하는 접근 방식으로, '무엇을' 달성하려는지에 집중합니다.

프로그래매틱 접근 (Programmatic Approach)

  • 정의: 프로그래매틱 접근은 코드나 스크립트를 통해 동적으로 설정이나 로직을 정의하고 실행하는 방식입니다.
  • 특징: 이 접근 방식에서는 조건문, 반복문, 변수 등 프로그래밍 언어의 기능을 활용하여 설정이나 동작을 동적으로 생성하고 조정
  • 장점: 복잡한 로직이나 조건에 따라 다르게 동작해야 하는 경우에 유연하게 대응할 수 있습니다.
  • 예시: Python의 setup.py 파일에서는 패키지의 의존성을 설치 조건에 따라 다르게 지정하거나, 패키지 버전을 동적으로 계산하는 로직을 구현할 수 있습니다.

선언적 접근 (Declarative Approach)

  • 정의:
    • 선언적 접근은 상태나 설정을 명시적으로 정의하는 방식으로, 어떤 작업을 할 것인지 '무엇(What)'에 초점을 맞춥니다.
    • 이 방식에서는 '어떻게(How)'보다는 최종 목표 상태나 결과의 구성을 선언
  • 특징:
    • 선언적 접근에서는 프로그램의 흐름이나 로직을 직접 작성하는 대신, 설정 파일이나 구성 파일에서 원하는 상태를 선언하고,
    • 시스템이 그 상태를 달성하기 위한 방법을 자동으로 결정합니다.
  • 장점:
    • 설정이 간결하고 읽기 쉬우며, 구성 관리가 용이합니다.
    • 사용자는 '무엇을' 달성하고자 하는지만 선언하면, 나머지는 시스템이 처리합니다.
  • 예시:
    • Python 패키지의 setup.cfg 파일에서는 패키지 이름, 버전, 설명 등을 선언적으로 정의
    • 이 정보는 빌드 시스템이 패키지를 어떻게 처리할지 결정하는 데 사용
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글