파이썬 배포 패키지 만들기 중간검토

Jay
4 min readFeb 16, 2019

--

파이썬 패키지 배포용 패키지 만드는 순서

1. PyPI에 배포하기 위한 준비

https://pypi.org/
  1. 회원가입 할 것(ID PW 알아두기)
  2. 이메일 주소로 확인 메일이 올 것이므로 접속해서 컨펌
  3. 내가 사용할 패키지 이름을 검색해 보고 이미 존재하는지 확인해보기

2. 패키지 이름을 정했다면, 깃허브에 같은 이름으로 repository 하나 만들자!

github create new repository

본인의 작업 환경을 비공개로 하고싶다면 Private. 그렇지 않다면 Public을 추천. 코드의 공개와는 상관이 없는 것이 PyPI로 배포되면 어차피 다 공개될 것이므로.

  • 기본적으로 repo 이름이 PyPI와 동일할 필요는 없지만, 동일하게 만드는 것이 좀더 관리되는 패키지가 될 것임
  • README는 이 패키지의 사용목적, 설명, 이용 방법 등의 총괄적인 가이드라인을 제공해주는 페이지 이며, *.md 파일이므로 MarkDown이 가능하다는 이점을 충분히 살려서 가독성을 높임과 동시에 시각자료를 제공하는 것까지도 고려해 볼만 하고, 무조건 있어야 된다고 생각.
  • .gitignore 파일의 경우 깃허브의 관리를 용이하게 하는 것으로, 파이썬 패키지에 포함될 필요가 없는 파일들을 깃허브 업로드가 안되게 해주는 필터같은 존재. 관리되는 리포를 만들기 위해서 꼭 필요하다고 보고, 여러 사람들이 검토하면서 만들어진 파이썬용 .gitignore를 추가해 두자. 손해볼 것 없다.
  • LICENSE 파일은 개인적으로 없어도 그만이라고 생각하지만 그렇다면 매우 오픈 된 형태의 MIT라이센스를 추가해두자. 처음에 깃리포 만들때 만들어두면 편함

3. 가상환경에서 작업하기

일단 파이썬 패키지를 배포할 때 가장 중요한 것은 내가 만든 코드가 작동한 환경을 다른 사람들 환경에서도 구동되게 만드는 것. 그렇다면 내 코드가 돌아가는 환경에서 내가 이용했던 다른 파이썬 패키지 정보를 제공 및 같이 설치 해줄 필요가 있다. 괜히 불필요한 라이브러리를 포함시켜서 제3자에게 설치를 강요할 필요가 없으므로, 내 배포용 패키지가 돌아가는 환경 정보를 트래킹 할 수 있는 가상환경을 하나 만들자. 파이썬에는 기본적으로 venv 가 제공이 된다.

python -m venv mypackage_env

원하는 위치에 가서 위 명령어로 새로운 가상환경을 만들어주고, 내 패키지가 돌아가는데 필요한 모든 라이브러리를 이 가상환경에 설치하면 된다. 가상환경을 활성화 시킨 후

pip freeze > requirements.txt

위와 같이 입력하면 현재 내 가상환경에 포함된 패키지들을 구체적인 버전까지 포함해서 알 수 있다. 위 파일을 나중에 깃허브에 포함시켜서 업데이트 한다면, 정확한 패키지 의존성 정보를 전달하기 때문에 내 패키지가 구동된 가상환경을 완벽히 재현 할 수 있다는 장점이 있다.

4. setup.py & twine을 이용한 패키징 및 PyPI에 업로드

먼저 내 파이썬 패키지가 준비가 되었다면 또 다른 가상환경을 만들자. 이번엔 패키징용 가상환경이다.

순서대로 1. 코드(깃허브 pull) 2. 패키지 구동용 가상환경 3. 패키지 패킹 및 업로드용 가상환경

mypackage_packer 활성화 하면 아래 세가지 라이브러리를 설치.

pip install setuptools
pip install wheel
pip install twine

그 다음…

mypackage폴더 안에 setup.py, setup.cfg파일을 만들어준다.

setup.py
setup.cfg
python setup.py bdist_wheel

setup.py가 있는 폴더에서 위 코드를 실행하면 dist폴더가 생성되고 그안에

ccpy-0.1-py3-none-any.whl 와 같은 *.whl 파일이 생성된다. 이게 우리가 PyPI에 업로드할 파일이다.

twine upload dist/ccpy-0.1-py3-none-any.whl

이렇게 입력해 준뒤 1번에서 만든 ID, PW를 입력해주면 끝.

--

--

Jay
Jay

Written by Jay

Brain Neural Network : Where neuroscience meets machine learning

No responses yet