| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- zip 파일 암호화
- MySQL
- Test
- plugin
- License
- Java
- query
- zip 암호화
- analyzer test
- license delete
- Mac
- ELASTIC
- API
- 900gle
- licence delete curl
- Elasticsearch
- docker
- springboot
- token filter test
- aggregation
- TensorFlow
- Kafka
- 차트
- matplotlib
- Python
- 파이썬
- aggs
- flask
- sort
- high level client
Archives
- Today
- Total
개발잡부
TOML 파일 - Neo4j 프로젝트 설정 본문
반응형
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 |
무슨 일이 일어나나
- pyproject.toml 읽음
- 패키지 빌드
- site-packages에 복사
- 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