파이썬 배포 파일 만들기

파이썬 코드를 작성하면서 모듈을 수 없이 만들었지만 왜 진작에 작성한 모듈을 패키징 해서 사이트 패키지에 설치할 생각을 하지 못했을 까요?

 

아마도 기업의 빠른 결과만을 원하는 요구사항에 맞추다 보니 아마도 재사용 따위는 뒷전이었던 것 같습니다. 문서를 읽다 보니 작성한 모듈을 패키징 하여 사이트 패키지에 설치하는 방법이 있어 저에게는 기록을 여러분에게는 소개를 하고자 합니다.

 

 

파이썬 모듈 패키징

파이썬 모듈 작성

author = "CaptainBIN"

class Captain:
    def who(self, in_par:str="BIN") -> str:
        """Captain은 누구?"""

        return "Captain" + in_par

def owner() -> str:
    """주인은 누구?"""

    return author

if __name__ == "__main__":
    print(author)
    print(owner())

    print("#"*30)
    
    cap=Captain()
    
    print(cap.who())
    print(cap.who("BIN BLOG"))
    

#실행결과
#CaptainBIN
#CaptainBIN
##############################
#CaptainBIN
#CaptainBIN BLOG

 

이와 같이 간단히 모듈을 작성하고 "cap_bin_mod.py"파일명으로 적당한 디렉터리에 저장한 후 실행결과를 확인하니 잘 동작합니다. 

 

모듈로써 동작이 잘 되는지 확인을 위해 "mod_test.py"파일을 생성하여 "cap_bin_mod.py"를 저장한 동일 경로에 저장합니다. "mod_test.py" 코드 및 실행 결과는 다음과 같습니다.

 

import cap_bin_mod as cap

capbin=cap.Captain()

print(cap.author)
print(cap.owner())

print("#" * 30)

print(capbin.who())
print(capbin.who("BIN BLOG"))

#실행결과
#CaptainBIN
#CaptainBIN
###############################
#CaptainBIN
#CaptainBIN BLOG

 

이제 "cap_bin_mod" 모듈을 사이트 패키지에 설치할 준비를 해보겠습니다.

 

 

파이썬 모듈 셋업 파일 만들기

파이썬 모듈을 패키징 하기 위해 준비해야 할 사항은 다음과 같습니다.

 

1. setuptools 라이브러리

2. setup.py와 README.txt 파일

3. 패키징 할 모듈

 

일단 1번의 setuptools 라이브러리는 표준 라이브러리로 파이썬 설치 시 자동 설치되어 있을 것입니다. 혹시나 pip list를 입력해 보시고 설치가 되어 있지 않다면 설치해 주시면 됩니다.

 

3번의 패키징 할 모듈은 위에서 작성한 "cap_bin_mod"모듈을 패키징 해보겠습니다.

 

1번과 3번이 준비되어 있으니 이제 2번의 setup.py와 README.txt 파일을 생성해 보겠습니다. README.txt 파일은 다들 아시겠지만 텍스트 파일로 이 프로그램은 어쩌고 어쩌고 서술하여 사용자에게 정보 전달을 하는 일종의 설명서와 같습니다.

 

주의사항은 패키징 진행 시 README.txt 파일의 내용이 없어도 되지만 파일은 있어야 합니다.

 

그럼 setup.py파일을 생성해보겠습니다. setup.py파일은 배포할 모듈 "cap_bin_mod.py"가 저장되어있는 디렉터리에 저장되어야 합니다.

from setuptools import setup

setup(
    name="cap_bin_mod",
    version='1.0.0',
    description='cap_bin_mod module packaging test.',
    author='CaptainBIN',
    author_email='wisbj@naver.com',
    url='captainbin.tistory.com',
    py_modules=['cap_bin_mod'],
)

 

setup함수 호출 시 여러 인자 값을 세팅해 주면 됩니다. 이 인자 값 중 주의해야 할 사항은 name과 py_modules입니다.

name으로 넘겨주는 값은 모듈 파일명이 아닌 모듈명입니다. 즉, 모듈 파일명과는 무관하게 이름을 세팅할 수 있습니다. 하지만 이름이 다를 경우 추후 혼선이 발생할 수 있어 일반적인 관습은 모듈명은 배포 파일명으로 사용합니다. 모듈 파일명은 py_modules에 기술합니다.

 

마지막으로 준비할 README.txt 빈 파일을 만들어 setup.py파일이 있는 디렉터리에 저장합니다.

 

이제 "cap_bin_mod.py", "setup.py", "README.txt"파일이 모두 동일한 디렉터리에 있는 상태입니다. 이제 패키징을 진행해 보겠습니다.

 

 

 

파이썬 배포파일 만들기

다음과 같은 명령을 수행합니다. 실행 시 sdist를 파라미터 값으로 주어 실행합니다.

python setup.py sdist

 

실행을 하면 다음과 같이 진행상황이 표시가 됩니다.

 

running sdist

running egg_info

creating cap_bin_mod.egg-info

writing cap_bin_mod.egg-info\PKG-INFO

writing dependency_links to cap_bin_mod.egg-info\dependency_links.txt

writing top-level names to cap_bin_mod.egg-info\top_level.txt

writing manifest file 'cap_bin_mod.egg-info\SOURCES.txt'

reading manifest file 'cap_bin_mod.egg-info\SOURCES.txt'

writing manifest file 'cap_bin_mod.egg-info\SOURCES.txt'

running check

creating cap_bin_mod-1.0.0

creating cap_bin_mod-1.0.0\cap_bin_mod.egg-info

copying files to cap_bin_mod-1.0.0...

copying README.txt -> cap_bin_mod-1.0.0

copying cap_bin_mod.py -> cap_bin_mod-1.0.0

copying setup.py -> cap_bin_mod-1.0.0

copying cap_bin_mod.egg-info\PKG-INFO -> cap_bin_mod-1.0.0\cap_bin_mod.egg-info

copying cap_bin_mod.egg-info\SOURCES.txt -> cap_bin_mod-1.0.0\cap_bin_mod.egg-info

copying cap_bin_mod.egg-info\dependency_links.txt -> cap_bin_mod-1.0.0\cap_bin_mod.egg-info

copying cap_bin_mod.egg-info\top_level.txt -> cap_bin_mod-1.0.0\cap_bin_mod.egg-info

Writing cap_bin_mod-1.0.0\setup.cfg

creating dist

Creating tar archive

removing 'cap_bin_mod-1.0.0' (and everything under it)

 

맨 아래 세줄처럼 메시지가 출력이 되었다면 배포 파일이 정상적으로 생성된 것을 의미합니다. 이제 setup.py파일이 있던 디렉터리에 기존에는 없었던 dist파일이 존재할 것입니다. dist디렉터리에 있는 파일을 확인해 보시면 zip 파일이나 tar.gz 파일이 있는 것을 확인하실 수 있습니다.

 

저의 경우에는 "cap_bin_mod-1.0.0.tar.gz" 파일이 생성되었습니다. 여기까지 모듈을 패키징 해보았습니다. 이제 생성한 패키지를 설치해 보겠습니다.

 

 

생성한 배포파일 설치

위에서 생성한 "cap_bin_mod-1.0.0.tar.gz" 파일이 있는 dist 디렉터리에서 다음과 같은 명령어를 입력합니다.

 

python -m pip install cap_bin_mod-1.0.0.tar.gz

 

간단한 모듈이여서 설치 시에도 출력되는 메시지가 간단합니다. 정상적으로 설치되었다면 다음과 같은 메시지를 확인할 수 있습니다.

 

Processing d:\dev_src\dist\cap_bin_mod-1.0.0.tar.gz
Installing collected packages: cap-bin-mod
  Running setup.py install for cap-bin-mod ... done
Successfully installed cap-bin-mod-1.0.0

 

그리고 파이썬에서 패키지를 설치하고 나면 제대로 설치되었는지 확인하는 명령어가 있습니다. 바로 "pip list"입니다. "pip list"를 입력하면 조금 전 설치한 "cap-bin-mod" 모듈이 버전 1.0.0이라고 표시되는 것을 확인하실 수 있습니다.

 

이제 파이썬 코드를 작성하면서 어디서든지 cap-bin-mod 모듈을 import 하여 코드를 재사용할 수 있습니다.

 

단, 주의사항은 분명 모듈명에 cpa_bin_mod라 기술하였지만 설치된 패키지 명을 보면 cap-bin-mod로 언더바(_)가 대시(-)로 변경된 것을 확인할 수 있습니다. import시 cap_bin_mod로 선언하면 됩니다.

 

MORE