1 minute read

Setuptool?

Setuptool 공식 문서

Setuptool이란 파이썬 패키징을 쉽게하기 위한 파이썬 라이브러리이다.

파이썬 패키지를 하나 만들어 보고 있는데, 관련 자료를 찾아보니 Setuptool 이라는게 있었다. 배포한 패키지를 쉽게 설치할 수 있게 하는 툴 인것 같다.

Setuptool으로 무엇을 할 수 있을까?

  • 파이썬 패키지와 모듈의 정의
  • 배포 패키지의 메타데이터 포함
  • 프로젝트 설치
  • 등등

Setuptool 의 설치

터미널에 입력 (프로젝트 루트 폴더에서):

pip install --upgrade setuptools

간단한 사용 예시

setup.py를 작성하여 패키지의 root 폴더에 넣는다.

# setup.py
from setuptools import setup, find_packages
setup( #여기에 옵션들이 들어간다. 옵션들은 setup.cfg 파일로 분리할 수도 있다.
    name="HelloWorld",
    version="0.1",
    packages=find_packages(),
)

패키지를 설치하는 명령어는 다음과 같다. (프로젝트 루트 폴더에서)

python setup.py install

단, 개발환경 이라면,

python setup.py develop

이다.

install 옵션으로 설치하면 코드를 수정했을 때 다시 python setup.py install을 실행해야 한다. 그러므로 패키지를 개발중이라 코드를 자주 수정하고 테스트하는 상황이라면 python setup.py develop을 실행한다. develop옵션은 소스에 대한 링크를 생성하여 코드의 변화가 실시간으로 적용된다.

setup.cfg

위의 예제에서 보면 setup()함수에 여러 설치 옵션들이 들어감을 알 수 있다. 이 옵션들은 setup.cfg이라는 별도의 파일에 따로 정리할 수 있다.

위의 예제에서 옵션을 setup.cfg파일로 뺀다면 다음과 같을 것 이다.

# setup.cfg
[metadata]
name = HelloWorld
version = 0.1
[options]
packages = find:
# setup.py
from setuptools import setup
setup()

setup.py가 훨씬 간단해진다.

여기에 잘 정리 되어 있으니 참고하면 좋다.

setup.cfg에서 중요하다 생각되는 부분은 이것 이다. 프로젝트(패키지)의 디렉토리 구조를 Setuptools이 인식할 수 있도록 [option]에 알맞은 값을 넣어야 한다.

예를 들어 파일이 다음과 같은 구조일때

├── src
│   └── mypackage
│       ├── __init__.py
│       └── mod1.py
├── setup.py
└── setup.cfg

setup.cfg의 option부분은 이렇게 써야 한다.

##...
[options]
package_dir = = src
packages = find:

[options.packages.find]
where = src
##...

이렇게 하지 않으면 패키지를 설치해도 사용할 수 없다.
ModuleNotFoundError: No module named ... 가 뜰것이다.

패키지 배포

링크 : packaging.python.org의 튜토리얼

생각해볼 점

setup.cfg, setup.py를 자동으로 생성해주거나 생성을 도와주는 별도의 프로그램이 있으면 좋겠다.

Comments