반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

TOML 파일 - Neo4j 프로젝트 설정 본문

카테고리 없음

TOML 파일 - Neo4j 프로젝트 설정

닉의네임 2026. 1. 16. 07:48
반응형

Neo4j 개인 프로젝트의  배치 였나.. 

가물 가물 

 

toml 파일을 쓰긴했지만 정확하게 다시 이해하고 넘어가려고 함. 

[build-system]
requires = ["setuptools>=61", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "search-graph"
version = "0.1.0"
description = "Elasticsearch 검색 로그를 Neo4j 그래프로 적재하는 유틸리티"
requires-python = ">=3.10"
dependencies = [
    "elasticsearch>=7,<8",
    "neo4j>=5,<6",
    "PyYAML>=6",
    "python-dotenv>=1",
]

[project.scripts]
search-graph = "search_graph.cli:main"

[tool.setuptools]
package-dir = {"" = "src"}

[tool.setuptools.packages.find]
where = ["src"]

 

Python 프로젝트를 “어떻게 빌드하고, 설치하고, 실행할지”를 정의하는 설계도 임

 

빌드 방식 정의 

[build-system]
requires = ["setuptools>=61", "wheel"]
build-backend = "setuptools.build_meta"

 

 

  • requires
    • 빌드 시 필요한 최소 패키지
    • setuptools 61 이상, wheel 필요
  • build-backend
    • 실제 빌드를 수행하는 엔진
    • setuptools.build_meta = setuptools 표준 방식

 

사용 

pip install .
pip install -e .
pip wheel .

 


명령어목적

pip install . 일반 설치 사용/배포
pip install -e . 개발용 설치 개발 중 (editable) 
pip wheel . 휠만 생성 배포/CI

 

 

무슨 일이 일어나나

  1. pyproject.toml 읽음
  2. 패키지 빌드
  3. site-packages에 복사
  4. CLI 명령어 등록 (search-graph)

 

pip install -e . 에 대한 상세 

 

  • site-packages에 복사 안함
  • 대신 현재 소스 디렉터리를 참조
  • 코드 수정 → 즉시 반영

 

CLI는?

  • search-graph 명령어 그대로 생성됨
  • 실행 시 항상 최신 코드

추천 상황 

  •  개인 프로젝트
  • CLI 유틸 개발
  • Neo4j/ES 로직 계속 수정 중

하면 안되는 조합

pip install .
pip install -e .

 

두 개 같이하면 안댐.. 더러워짐 


다시 toml 로 돌아와서 

 

[project] — 프로젝트 메타데이터 

[project]
name = "search-graph"
version = "0.1.0"
description = "Elasticsearch 검색 로그를 Neo4j 그래프로 적재하는 유틸리티"
requires-python = ">=3.10"

 

항목의미

name 패키지 이름 (pip install search-graph)
version 버전
description 설명
requires-python 실행 가능한 Python 최소 버전

 

[project.dependencies] — 런타임 의존성

dependencies = [
    "elasticsearch>=7,<8",
    "neo4j>=5,<6",
    "PyYAML>=6",
    "python-dotenv>=1",
]

 

설치 

pip install search-graph

 

pip이 자동으로 아래를 설치

  • Elasticsearch Python Client (7.x)
  • Neo4j Driver (5.x)
  • YAML 파서
  • .env 로딩 라이브러리

버전 범위 설정 이유 (중요)

  • >=7,<8
    API breaking change 방지
  • ES 8.x는 인증/SSL 방식 완전히 다름

 

[project.scripts] — CLI 명령어 등록

 

[project.scripts]
search-graph = "search_graph.cli:main"

 

 

이 프로젝트를 “명령어”로 실행 가능하게 만든다

 

실제 효과

search-graph

 

내부적으로

from search_graph.cli import main
main()

 

 

  • search-graph = 실행 명령어
  • search_graph/cli.py 의 main() 실행

이 부분 때문에 이 프로젝트는 “라이브러리 + CLI 도구”

 

 

[tool.setuptools] — 소스 디렉터리 구조 정의

[tool.setuptools]
package-dir = {"" = "src"}

 

의미

 

  • 패키지는 src/ 아래에 있다
  • src-layout (권장 구조)

 

프로젝트 루트
 ├── pyproject.toml
 └── src/
     └── search_graph/
         ├── cli.py
         ├── es_client.py
         └── ...

 

[tool.setuptools.packages.find] — 패키지 자동 탐색

 

[tool.setuptools.packages.find]
where = ["src"]

 

src/ 아래에서 Python 패키지를 자동으로 찾아라

 

효과

  • search_graph 패키지 자동 포함
  • __init__.py 기준으로 패키지 인식

 

이 파일이 실제로 하는 일

 

설치 시

pip install .

 

 

  • 빌드 도구 결정
  • 의존성 설치
  • 패키지 구성
  • CLI 명령어 등록

실행시 

search-graph --config config.yml

 

 

 

  • TOML은 직접 실행되지는 않음
  • 대신:
    • pip
    • setuptools
    • entry point 시스템
      이 이 파일을 읽음

 

반응형
Comments