본문 바로가기

Computer Science/[programming]PL

[python] setuptools과 setup.py로 빌드 로컬배포해보기

728x90

 

setuptools

setuptools는 파이썬에 포함되어 있는 것을 확인했습니다. (따로 설치x)

제가 작성한 파이썬 파일은 다음과 같습니다. 아래 파일을 패키지화 해보겠습니다.

 

def sayHi() :
    print "Hi, velbie! :)"

 

폴더구조를 아래처럼 만들었습니다. 원래는 helloworld 출력하는 velbie.py 밖에 없었는데 빌드하려니깐 README 파일이 필요하다고 해서 이 공식문서에서 readme를 복붙해 만들었습니다. (링크) 테스트부분은 없앴습니다.

 

C:.
│  README
│  setup.py
│
└─example_project
        velbie.py
        __init__.py

 

setup.py 파일을 복붙해서 이름만 수정했습니다. (packages=부분을 봐주세요)

 

import os
from setuptools import setup

# Utility function to read the README file.
# Used for the long_description.  It's nice, because now 1) we have a top level
# README file and 2) it's easier to type in the README file than to put a raw
# string in below ...
def read(fname):
    return open(os.path.join(os.path.dirname(__file__), fname)).read()

setup(
    name = "example_project",  # 이부분 수정
    version = "0.0.4",
    author = "Andrew Carter",
    author_email = "andrewjcarter@gmail.com",
    description = ("An demonstration of how to create, document, and publish "
                                   "to the cheese shop a5 pypi.org."),
    license = "BSD",
    keywords = "example documentation tutorial",
    url = "http://packages.python.org/an_example_pypi_project",
    packages=['example_project',], # 이부분 수정
    long_description=read('README'),
    classifiers=[
        "Development Status :: 3 - Alpha",
        "Topic :: Utilities",
        "License :: OSI Approved :: BSD License",
    ],
)

빌드

sdist란 명령어로 빌드해보겠습니다. (sdist create a source distribution (tarball, zip file, etc.))

dist란 폴더가 생기고 안에 압축파일이 생깁니다. (저는 tar.gz 파일이 생겼습니다.)

 

python setup.py sdist

배포

사실 pip에 등록하는것이 아니니, 로컬배포하는거니깐 등록이라고 표현하는게 더 정확한것 같습니다.

압축을 푼 example_project-0.0.4 에 들어가서 setup 파일이 있는곳에 가서 아래 명령어를 입력합니다.

그러면 python 이 설치된곳에 site-packages에 egg 파일이 생깁니다.

 

python setup.py install

사용

전혀 다른곳에서 파이썬 파일을 만들고 아래와 같이 테스트를 해봅니다.

 

from example_project import velbie

velbie.sayHi()

 

출력되는것을 확인할 수 있습니다.😎

 

 

728x90