Flask Extension 만들기 & Python Package (PyPI) 만들어 배포하기

Development / Python / Flask / Boto / PyPI / SQS

Flask에서 AWS SQS를 사용하기 위해 Boto를 이용하고자 하였는데, 각종 외부 Connection들을 Flask의 Application Context 생명 주기(?)에 맞춰주지 않으면 연결이 끊어지는 현상을 자주 겪었기 때문에(MySQL에서도, Memcached에서도, RabbitMQ에서도..) 이를 위해 Flask 전용 Boto 패키지(Flask Extension)가 있는지 찾아보았지만.. 역시나 없었다. (Django용은 있었다.) 그래서 한 번 만들어보았다!

Flask Extension을 만드는 것은.. 나는 단순하게 Flask의 app.config를 이용해서 초기화 하고, 이를 app.extensions 딕셔너리에 넣는 정도였기 때문에 여기서 깊게 설명하기는 힘들 것 같고.. Python package를 만들어 PyPI에 배포하는 것 위주로 설명해보고자 한다. 물론 Python 공식 유저 가이드의 Packaging and Distributing Projects를 참고하면 가장 좋다^0^.. 여기서는 간편하고 빠르게 배포하는 방법을 다룬다.

  1. Github repo를 만들고 소스를 푸시한다. 여기서 중요한 점은 버전 정보에 따라 Release tag를 꼭 붙여주어야 한다는 것이다.
  2. README.rst 파일을 생성한다. 나는 일반적으로 마크다운으로 README 파일을 작성해왔는데, Python 공식 유저 가이드에서도 그렇고 많은 Python Package들이 README 파일을 reStructuredText를 이용해 작성하였길래 나도 따라갔다.
  3. 가장 중요한 setup.py를 생성한다. 말 그대로 설치에 필요한 전처리나 설치 정보를 모두 담고있다. 정말 많은 정보를 담을 수 있지만(setup() args) 나는 미니멀리즘에 입각하여.. Required한 정보들만 입력하였다.

    #!/usr/bin/env
    # -*- coding: utf-8 -*-
    from setuptools import setup
    
    
    try:
       with open('README.rst') as f:
           readme = f.read()
    except IOError:
       readme = ''
    
    
    setup(
       name="Flask-BotoSQS",
       version='0.1.1',
       py_modules=['flask_boto_sqs'],
       author='LyuGGang',
       author_email='me at lyuwonkyung dot com',
       url='https://github.com/LyuGGang/Flask-BotoSQS',
       description="Boto SQS integration for Flask",
       long_description=readme,
       install_requires=["Flask", "boto"],
    )
    

    기타 MANIFEST.in, setup.cfg 파일등을 통해 더 많은 정보나 옵션을 담을 수 있지만, 기본적으로 위의 파일들로도 패키징에는 충분한 것 같다.

  4. 실제 pip를 이용해 Github repo에서 바로 다운로드가 되는지 테스트해보자.

    $ pip install git+https://github.com/LyuGGang/Flask-BotoSQS.git
    
  5. 잘 되면? 바로 PyPI에 등록한다!

    $ python setup.py register
    

    명령어를 입력하면 기존에 가지고 있는 PyPI 계정을 사용할지, 아니면 새로 가입할지 등을 묻는 간단한 대화형 UI가 나타난다. 매우 친절하므로 하라는대로 하면 된다.

  6. PyPI 사이트pip search명령어를 통해 내 패키지가 정상 등록되어 있는 것을 보고 기뻐한다!

무언가 Bower 패키지를 만들 때 보다는 조금 복잡한 느낌이지만 어렵지 않다! 당장 유용한 패키지를 만들어 홍익인간의 정신을 본받아 온 세상을 이롭게 해보자!

** Flask-BotoSQS: PyPI, GitHub Repo

Share on : Twitter, Facebook or Google+