Python Packaging
1.1. 파이썬 패키징을 사용하는 이유
- 프로젝트 간 코드를 재사용하기 위해
- 코드의 유지보수를 쉽게하기 위해 패키징은 코드에 대한 문서화나 조직화를 요구하기 때문에 이후에도 쉽게 코드를 이해할 수 있다.
- 다른사람들에게 내 코드를 공유하기 위해
2. Python Directory Structure
패키징을 하기전에 적절한 폴더 구조를 구성해야 한다. python 는 다음과 같은 일부 특정 폴더로 구성되어 있다.
- 패키지 이름을 가진 root directory
- Source codes: root directory 의 subdirectory 에 (
.py확장자를 지닌) 한개 이상의 모듈 - Build instructions: 어떻게 패키지를 설치 및 빌드하는지에 대한 설명서
- Documentation: root directory 내 README 파일과
docs라는 이름의 subdirectory 에 있는 docmentations - Package test: 테스트를 위한
tests라는 subdirectory
2.1. 예시: Pycounts
pycounts
├── .readthedocs.yml ┐
├── CHANGELOG.md │
├── CONDUCT.md │
├── CONTRIBUTING.md │
├── docs │
│ ├── changelog.md │
│ ├── conduct.md │
│ ├── conf.py │
│ ├── contributing.md │ Package documentation
│ ├── example.ipynb │
│ ├── index.md │
│ ├── make.bat │
│ ├── Makefile │
│ └── requirements.txt │
├── LICENSE │
├── README.md ┘
├── pyproject.toml ┐
├── src │
│ └── pycounts │ Package source code, metadata,
│ ├── __init__.py │ and build instructions
│ └── pycounts.py ┘
└── tests ┐
└── test_pycounts.py ┘ Package tests3. MANIFEST in
MANIFEST.in
- 이 파일에는 내부 패키지 directory 에 들어있지는 않지만 포함시키고 싶은 파일을 적을 수 있다.
- 일반적으로
readme,LICENSE,requirements.txt와 같은 파일을 포함한다. - 예시
include LICENSE
include requirements.txtsetup.pysetup()함수name: 패키지의 이름version: 패키지의 배포 버전description: 패키지에 대한 설명- url: 패키지를 대표하는 웹페이지
- author: 패키지의 작성자
license: 패키지의 라이센스- packages: 프로젝트에 포함되는 패키지 리스트
- install_requires: 실행 환경에 필요한 최소한의 패키지 리스트
python_requires: 실행 환경에 필요한 파이썬 버전
4. __init__.py 의 용도
__init__.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다.
4.1. __all__ ?
특정 디렉터리의 모듈을 * 를 사용하여 import 할 때에는 다음과 같이 해당 디렉터리의 __init__.py 파일에 __all__ 변수를 설정하고 import 할 수 있는 모듈을 정의해 주어야 한다.
예시
# C:/doit/game/sound/__init__.py
__all__ = ['echo']여기에서 __all__ 이 의미하는 것은 sound 디렉터리에서 * 기호를 사용하여 import 할 경우 이곳에 정의된 echo 모듈만 import 된다는 의미이다.`