py_src 파일 구조
python을 코딩하다 보니 file system의 중요성을 알게 되었습니다. __init__.py나 __main__.py 같이 패키지화를 해주는 파일들이 있기 때문에 이를 활용하여 python 파일들을 모듈화 및 패키지화해서 진행하니 파일들이 훨씬 더 정돈되고 깔끔한 느낌을 받았습니다. 그래서 오늘은 가장 상위 폴더인 py_src의 하위 폴더들을 어떤 식으로 structure하는게 좋은지 적어보겠습니다.
여러개의 패키지 관리
파이썬을 하다보면 하나의 프로젝트에 여러개의 패키지를 넣어야할 경우가 있습니다. 이런 경우에 어떤식으로 파일 구조를 짰는지 제가 짠 파일 시스템을 예로 들어 보겠습니다.
py_src
└── crawler
├── __init__.py
├── core
│ ├── logger.py
│ └── settings.py
├── crawler_1
│ ├── __init__.py
│ └── __main__.py
├── crawler_2
│ ├── __init__.py
│ └── __main__.py
└── logs
├── crawler_1.log
├── crawler_2.log
└── root.log
py_src 아래 crawler라는 패키지가 있고 그 안에 crawler_1과 crawler_2라는 이름의 패키지가 존재합니다. 그리고 core라는 setting에 해당하는 폴더도 존재합니다.
PyPi 패키지 파일 시스템
해당 py_src를 나중에 pypi에 등록하고 싶다면 py_src밑에는 보조 파일을들은 존재하되, pip install에 필요한 폴더(root)는 하나만 있어야 합니다. 그 이유는 py_src아래에 오직 하나의 폴더만 패키지화되어서 pypi에 올릴 수 있고 그렇지 않고 여러개의 폴더가 py_src 바로 아래에 있다면, 이들 각각의 패키지를 하나씩 pypi에 패키지로 등록해주어야 합니다.
py_src와 같은 level에는 setup에 관련된 파일들(setup.py, setup.cfg, pyproject.toml)을 놓아야 합니다. setup의 실행순서는 pyproject.toml -> setup.py와 동시에 setup.cfg가 실행됩니다.
setup.cfg에는 metadata나 그 밖에 setup에서 static으로 설정해줘야하는 설정값들이 들어가게 됩니다.
pyproject.toml은 setup.py가 실행되기 전에 실행되므로 setup.py의 dependency 설치를 하게 도와줍니다.