Python 패키지 개발과 배포를 위한 setup.py 활용

1. 프로젝트 디렉터리 구조 구성

모듈화된 Python 패키지를 제작하기 위해 아래와 같은 디렉터리 구조를 준비한다. 각 하위 모듈은 별도의 서브패키지(suba, subb)로 정의되며, __init__.py 파일을 포함하여 Python에서 인식 가능한 패키지로 만든다.

.
├── setup.py
├── suba
│   ├── __init__.py
│   ├── aa.py
│   └── bb.py
└── subb
    ├── __init__.py
    ├── cc.py
    └── dd.py

2. setup.py 작성: 패키지 메타데이터 정의

setup.py는 패키지의 빌드 및 설치를 담당하는 스크립트로, distutils 또는 setuptools를 사용할 수 있다. 현재 예제에서는 distutils.core.setup을 이용하며, py_modules에 포함할 모든 모듈을 점(.) 표기법으로 명시한다.

from distutils.core import setup

setup(
    name="testModule",
    version="1.0",
    description="간단한 테스트용 모듈",
    author="test",
    py_modules=[
        'suba.aa',
        'suba.bb',
        'subb.cc',
        'subb.dd'
    ]
)

3. 빌드 과정 수행

빌드 명령어를 실행하면 소스 코드가 build/lib 디렉터리 아래로 복사되며, 설치를 위한 중간 형태의 구조가 생성된다.

python3 setup.py build

실행 후 생성된 디렉터리 구조:

build/
└── lib/
    ├── suba/
    │   ├── __init__.py
    │   ├── aa.py
    │   └── bb.py
    └── subb/
        ├── __init__.py
        ├── cc.py
        └── dd.py

4. 소스 배포판 압축 파일 생성

sdist 명령어를 사용해 타겟 시스템에 배포할 수 있는 tar.gz 형식의 아카이브를 생성한다. 이 파일은 다른 머신에서도 설치 가능하다.

python3 setup.py sdist

생성된 아티팩트는 dist/ 디렉터리 내에 위치하며, 이름은 testModule-1.0.tar.gz이다. 출력 로그에서 메타데이터 누락 경고가 발생할 수 있는데, 이는 선택적 필드인 author_email이나 README, MANIFEST.in 파일이 없기 때문이다.

5. 외부 환경에서 패키지 설치

생성된 압축 파일을 다른 위치로 복사한 후, 압축을 해제하고 설치를 진행한다.

cp dist/testModule-1.0.tar.gz /root/
cd /root/
tar xf testModule-1.0.tar.gz
cd testModule-1.0
python3 setup.py install

설치 과정에서 모듈이 site-packages 디렉터리에 복사되고, 파이썬 바이트코드(.pyc) 파일이 자동으로 컴파일된다. 설치 완료 후 Python 인터프리터에서 임포트 테스트를 수행할 수 있다.

python3
>>> import suba
>>> import suba.aa
>>> from subb import cc

모든 임포트가 성공하면 패키지가 정상적으로 설치된 것이다.

태그: python setup.py 패키지 배포 distutils 모듈 설치

6월 5일 20:58에 게시됨