-
파이썬(Python) PyPI 배포하기PM을 부탁해/주말코딩 2020. 8. 5. 07:33반응형
오랜만에 다시 주말코딩을 시작해보았습니다. 2020년 목표 중에 주말코딩이 목표 중에 하나였는데... 생각보다 ㅎㅎ 역시 쉽지 않더라구요. 역시 세상엔 재밌는 것들이 너무 많죠. ㅋㅋㅋ 하지만 그래도 다시 마음을 먹고 시작해보았습니다.
예전에 사놓았던 책을 취미(?)로 한 권씩 띠(?)는게 2020 목표 중의 하나인데 이게 이번 생애에 다 될런지 모르겠네요. ㅋㅋ 하지만 그래도 제가 좋아하는 시리즈 Head First Programming : 파이썬으로 처음 배우는 프로그래밍을 띠었습니다. 너무 감격스러운 순간이라서 혼자 캔맥주 마시면서 낄낄했는데... 아직 갈 길이 많네요 ㅋㅋ 사실 너무 초보적인 내용이라 블로그에 쓸 말이 없네요. ㅋㅋ
다음 단계로 Head First Python, 개정판을 띠고 있는데 생각보다 너무 재밌어서 신기하고 좋습니다(?) 크큭! 역시 재밌는 건 취미로 해야 재밌는 것 같아요. 혹시 코딩을 취미로 하신다면 강추해요. 뭔가 만드는 재미가 쏠쏠합니다.
사실 어릴 적에 축구를 굉장히 좋아해서 축구 선수가 되고 싶다는 생각을 한 적이 있었는데요. 선수로서 하는 것보다 조기축구 생활도 생각보다 나쁘지 않다는 생각이 많이 들더라구요. 그래서 2020 프로젝트로 조기코딩(?)정했습니다. 근데 워딩은 조금 바꿨어요. ㅋㅋ 조기코딩이라고 하니까 어린 시절부터 코딩을 가르치는 사교육 스멜이 너무 심하더라고요. 그래서 주말 코딩으로 ㅋㅋ
자 이제 그러면 본론으로 들어갈께요.
Head First Python 을 보면서 이것저것 예제를 따라해보았는데요. 책도 조금 오래되었고 (^^;; 제가 좀 많이 늦었죠...) 그러면서 예제 중에 잘 작동되지 않는 것이 있더라구요. 그 중에서 PyPI에 파이썬 패키지를 빌드해서 배포하는 건데요. 시작하자 마자 잘 안되어서 ㅋㅋㅋ 한 동안 좌절하다가 다른 파이썬 블로거 분들 자료(역시 갓! 블로거) 보면서 재도전에 성공했습니다. 이러면 또 스스로 파티해야죠. 하하
큰 내용은 아니고 학습한 내용을 간단하게 남겨봅니다. 크큭
6가지 단계입니다.
- PyPI 사이트 가입
- setup 관련파일 만들기
- 라이브러리 설치
- 빌드
- 배포
- 배포 확인
1. PyPI 사이트 가입
가입은 너무 쉽습니다. ㅎㅎ
2. setup.py 관련파일 만들기
만약에 setuptools를 아직 설치 안했다면 pip install setuptools을 먼저 설치해야 합니다. 터미널에서 아래 명령어를 실행합니다.
pip install setuptools
(실제 터미널) (base) 맥북이름-MacBook-Pro:맥북이름과 경로$ pip install setuptools Requirement already satisfied: setuptools in /opt/anaconda3/lib/python3.6/site-packages (46.1.3.post20200330)a
setup.py 파일을 아래와 같이 만듭니다.
import setuptools with open("README.md", "r") as fh: long_description = fh.read() setuptools.setup ( name = 'srproject', version = '1.0.2', license = 'MIT', py_modules = ['srproject'], description = 'nested 리스트를 간단하게 출력하기', author = 'smallrich', author_email = '이메일주소@gmail.com', url = '관리하는 웹사이트 URL', packages = setuptools.find_packages(), classifiers = [ # 패키지에 대한 태그 "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent" ], )
3. 라이브러리 설치
터미널에서 pip install wheel을 설치합니다.
pip install wheel
(실제 터미널) (base) 맥북이름-MacBook-Pro:맥북이름과 경로$ pip install wheel Requirement already satisfied: wheel in /opt/anaconda3/lib/python3.6/site-packages (0.34.2)
4. 빌드
위에서 만든 setup.py 파일이 있는 폴더에서 아래 명령어를 실행하여 빌드합니다.
python setup.py bdist_wheel
(실제 터미널) (base) 맥북이름-MacBook-Pro:맥북이름과 경로$ python setup.py bdist_wheel running bdist_wheel running build running build_py installing to build/bdist.macosx-10.7-x86_64/wheel running install running install_lib creating build/bdist.macosx-10.7-x86_64/wheel copying build/lib/srproject.py -> build/bdist.macosx-10.7-x86_64/wheel running install_egg_info running egg_info writing srproject.egg-info/PKG-INFO writing dependency_links to srproject.egg-info/dependency_links.txt writing top-level names to srproject.egg-info/top_level.txt reading manifest file 'srproject.egg-info/SOURCES.txt' writing manifest file 'srproject.egg-info/SOURCES.txt' Copying srproject.egg-info to build/bdist.macosx-10.7-x86_64/wheel/srproject-1.0.2-py3.6.egg-info running install_scripts creating build/bdist.macosx-10.7-x86_64/wheel/srproject-1.0.2.dist-info/WHEEL creating 'dist/srproject-1.0.2-py3-none-any.whl' and adding 'build/bdist.macosx-10.7-x86_64/wheel' to it adding 'srproject.py' adding 'srproject-1.0.2.dist-info/METADATA' adding 'srproject-1.0.2.dist-info/WHEEL' adding 'srproject-1.0.2.dist-info/top_level.txt' adding 'srproject-1.0.2.dist-info/RECORD' removing build/bdist.macosx-10.7-x86_64/wheel
5. 배포
이제 드디어 배포합니다. 배포를 위해서는 pip install twine 명령어를 사용하여 twine을 설치해야 합니다.
pip install twine
(실제 터미널) (base) bacchushanui-MacBook-Pro:Chapter02A bacchus.han$ pip install twine Requirement already satisfied: twine in /opt/anaconda3/lib/python3.6/site-packages (3.1.1) Requirement already satisfied: setuptools>=0.7.0 in /opt/anaconda3/lib/python3.6/site-packages (from twine) (46.1.3.post20200330) Requirement already satisfied: requests-toolbelt!=0.9.0,>=0.8.0 in /opt/anaconda3/lib/python3.6/site-packages (from twine) (0.9.1) Requirement already satisfied: tqdm>=4.14 in /opt/anaconda3/lib/python3.6/site-packages (from twine) (4.36.1) Requirement already satisfied: importlib-metadata; python_version < "3.8" in /opt/anaconda3/lib/python3.6/site-packages (from twine) (1.5.0) Requirement already satisfied: readme-renderer>=21.0 in /opt/anaconda3/lib/python3.6/site-packages (from twine) (26.0) Requirement already satisfied: requests>=2.20 in /opt/anaconda3/lib/python3.6/site-packages (from twine) (2.23.0) Requirement already satisfied: pkginfo>=1.4.2 in /opt/anaconda3/lib/python3.6/site-packages (from twine) (1.5.0.1) Requirement already satisfied: keyring>=15.1 in /opt/anaconda3/lib/python3.6/site-packages (from twine) (21.1.1) Requirement already satisfied: zipp>=0.5 in /opt/anaconda3/lib/python3.6/site-packages (from importlib-metadata; python_version < "3.8"->twine) (0.6.0) Requirement already satisfied: bleach>=2.1.0 in /opt/anaconda3/lib/python3.6/site-packages (from readme-renderer>=21.0->twine) (3.1.4) Requirement already satisfied: docutils>=0.13.1 in /opt/anaconda3/lib/python3.6/site-packages (from readme-renderer>=21.0->twine) (0.16) Requirement already satisfied: six in /opt/anaconda3/lib/python3.6/site-packages (from readme-renderer>=21.0->twine) (1.14.0) Requirement already satisfied: Pygments>=2.5.1 in /opt/anaconda3/lib/python3.6/site-packages (from readme-renderer>=21.0->twine) (2.6.1) Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /opt/anaconda3/lib/python3.6/site-packages (from requests>=2.20->twine) (1.25.8) Requirement already satisfied: idna<3,>=2.5 in /opt/anaconda3/lib/python3.6/site-packages (from requests>=2.20->twine) (2.9) Requirement already satisfied: certifi>=2017.4.17 in /opt/anaconda3/lib/python3.6/site-packages (from requests>=2.20->twine) (2020.4.5.1) Requirement already satisfied: chardet<4,>=3.0.2 in /opt/anaconda3/lib/python3.6/site-packages (from requests>=2.20->twine) (3.0.4) Requirement already satisfied: more-itertools in /opt/anaconda3/lib/python3.6/site-packages (from zipp>=0.5->importlib-metadata; python_version < "3.8"->twine) (8.2.0) Requirement already satisfied: webencodings in /opt/anaconda3/lib/python3.6/site-packages (from bleach>=2.1.0->readme-renderer>=21.0->twine) (0.5.1)
그리고 여기서 중요한 것은 dist폴더안에 빌드 파일명을 사용해야 한다는 것입니다. 명령어를 이렇게 사용해야 합니다.
twine upload dist/배포파일명
(실제 터미널) (base) bacchushanui-MacBook-Pro:Chapter02A bacchus.han$ twine upload dist/srproject-1.0.2-py3-none-any.whl Uploading distributions to [https://upload.pypi.org/legacy/](https://upload.pypi.org/legacy/) Enter your username: smallrich Enter your password: Uploading srproject-1.0.2-py3-none-any.whl 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4.72k/4.72k [00:03<00:00, 1.59kB/s]
6. 배포 확인
setup.py 파일에서 vision 표시를 잘못해서 배포를 2번했습니다. ^^; 시행 착오가 약간있었네요. ㅋㅋ
하지만 최종 성공입니다. 사실 개발자가 아니라서 중간중간에 시행착오를 조금 겪긴 했지만 그래도 성공하니 뿌듯하네요.
<참고 사이트 - 첫 번째 배포에 큰 도움이 된 사이트(다른 파이썬 블로거 분들 자료(역시 갓! 블로거))>
https://rampart81.github.io/post/python_package_publish/
반응형댓글