41
파파파 파파파파 파파 파파파파 파파파 파파파 파파파 파파파파파 – 파 6 파 (1) 파파파파파파파 2015.7 파파 <[email protected]>

Python 생태계의 이해

  • Upload
    -

  • View
    135

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Python 생태계의 이해

파이썬 생태계의 이해정보기술 시대에 유익한 파이썬 프로그래밍 – 제 6 강 (1)

동양미래대학교2015.7

최용 <[email protected]>

Page 2: Python 생태계의 이해

주제• PEPs (Python Enhancement Proposals)• Python 라이브러리와 PyPI, 패키지 관리자• Python 언어의 구현체 및 배포본• Python 라이선스• Python 커뮤니티

Page 4: Python 생태계의 이해

PEPs (Python Enhancement Propos-als)

Page 5: Python 생태계의 이해

PEPs (Python Enhancement Propos-als)• PEP 란 ?• Python 에 대한 설계 문서 , 새로운 기능 설명 , 기술적인 명세 https

://www.python.org/dev/peps/

• PEP 의 종류• Standards Track PEP: 새로운 기능 및 구현에 대한 설명

예 : PEP 255 -- Simple Generators

• Informational PEP: 설계 문제에 대한 설명 , 일반적 지침예 : PEP 20 -- The Zen of Python

• Process PEP: Python 언어 외적인 프로세스에 대한 설명 , Meta PEP예 : PEP 0001 -- PEP Purpose and Guidelines

Page 6: Python 생태계의 이해

PEP 1 – PEP Purpose and Guidelines

• Python’s BDFL(“Benevolent Dictator for Life”, 관대한 종신 독재자 )• Guido van Rossum: Python 의 창시자 & 설계 총책임자• 새로운 PEP 에 대한 최종 승인• 핵심 개발자에게 위임 ("BDFL-Delegate“)

• PEP Editors• PEPs 메일링 리스트 구독• PEP 점검 , 교열 , 승인 / 반송• PEP 번호와 종류 (S, F, I) 부여• 저장소에 추가

• Champion(Author)• 아이디어• 논의 , 합의• PEP 작성 , 제출• 개정

https://www.python.org/dev/peps/pep-0001/http://sk8erchoi.bitbucket.org/peps-korean/pep-0001.html

Barry Warsaw, Jeremy Hylton, David Goodger, Nick Coghlan

Page 7: Python 생태계의 이해

PEP 8 – Style Guide for Python Code

• A Foolish Consistency is the Hobgoblin of Little Minds

http://en.wikipedia.org/wiki/Self-Reliance

어리석은 ' 일관성 ' 은 좁은 마음에서 나온 도깨비 같은 것으로 , 그릇이 작은 정치가와 철학자 , 신학자들이 숭배하는 대상이다 . 일관성과 위대한 영혼은 서로 아무 관계도 없다 . 일관성을 걱정하는 것은 벽에 비친 자신의 그림자를 걱정하는 것과 같다 .오늘 당신이 생각하는 것을 단호하게 말하라 . 그리고 내일은 또 내일 생각하는 것을 단호하게 말하라 . 오늘 말하는 것이 어제 말한 것과 모든 면에서 모순된다 해도 괜찮다 . ' 아 , 그러면 틀림없이 오해받을 텐데 .'오해받는게 그렇게 나쁜 것인가 ?피타고라스는 사람들로부터 오해를 받았다 . 소크라테스도 , 예수도 , 루터도 , 코페르니쿠스도 , 갈릴레오도 , 뉴턴도 마찬가지다 .인간의 육신에 깃들었던 순수하고 현명한 정신은 모두 세상으로부터 오해를 받았다 . 위대한 인물이 된다는 것은 오해를 받는다는 것이다 .

자기신뢰 - 랠프 월도 에머슨http://www.ilwar.com/pen/63815

Page 8: Python 생태계의 이해

PEP 8 – Style Guide for Python Code

• 4 개의 스페이스를 들여쓰기의 단위로 사용 ( 탭보다 스페이스가 좋음 )• 한 행에는 최대 79 글자까지만 넣을 것• 최상위 수준 함수와 클래스 정의는 두 줄을 띄워서 구분• UTF-8 로 작성• import 순서

1. 표준 라이브러리2. 관련이 있는 서드파티 라이브러리3. 로컬 어플리케이션 / 자체 라이브러리

• 함수 호출• 좋음 : spam(1)• 나쁨 : spam (1)

• …https://www.python.org/dev/peps/pep-0008/

http://sk8erchoi.bitbucket.org/peps-korean/pep-0008.html

Guido van Rossum <guido at python.org>Barry Warsaw <barry at python.org>Nick Coghlan <ncoghlan at gmail.com>

Page 9: Python 생태계의 이해

PEP 20 – 파이썬 선 ( 禪 )

아름다움이 추함보다 좋다 .

명시가 암시보다 좋다 .

단순함이 복잡함보다 좋다 .

복잡함이 꼬인 것보다 좋다 .

수평이 계층보다 좋다 .

여유로운 것이 밀집한 것보다 좋다 .

가독성은 중요하다 .

특별한 경우라는 것은 규칙을 어겨야 할 정도로 특별한 것이 아니다 .

허나 실용성은 순수성에 우선한다 .

오류 앞에서 절대 침묵하지 말지어다 .

…https://www.python.org/dev/peps/pep-0020/

http://sk8erchoi.bitbucket.org/peps-korean/pep-0020.html

Tim Peters <tim at zope.com>

Page 10: Python 생태계의 이해

PEP 202 – List Comprehensions

• map(), filter(), 중첩 루프 등을 사용하여 리스트를 생성하는 것을 대신할 수 있는 간결한 방법• Python 2.0 에서 도입

>>> [i for i in range(10)]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> [i for i in range(20) if i % 2 == 0]

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

https://www.python.org/dev/peps/pep-0202/

Barry Warsaw <barry at python.org>

Page 11: Python 생태계의 이해

PEP 205 – Weak References

• ARC(Automatic Reference Counting) 방식의 자동 메모리 관리에서 발생하는 메모리 누수에 대한 해법• Python 에서 약한 참조에 대한 기존의 접근• Object caches(weak dictionaries)• Reduction of pain from circular references• Dianne Hackborn's vref proposal (1995)

• 약한 참조를 생성하는 weakref 모듈을 제안• Python 2.1 에서 구현

Fred L. Drake, Jr. <fdrake at acm.org>

Page 12: Python 생태계의 이해

PEP 478 – Python 3.5 Release Schedule• 일정

• 3.5.0 alpha 1: February 8, 2015• 3.5.0 beta 1: May 24, 2015 ("feature freeze": 기능 추가 없음 )• 3.5.0 candidate 1: August 9, 2015• 3.5.0 final: September 13, 2015

• 기능• PEP 465 , a new matrix multiplication operator• PEP 461 , %-formatting for binary strings• PEP 471 , os.scandir()• PEP 479 , change StopIteration handling inside generators• PEP 441 , improved Python zip application support• …

https://www.python.org/dev/peps/pep-0478/

Larry Hastings <larry at hastings.org>

Page 13: Python 생태계의 이해

PEP 3000 – Python 3000

• Python 3000 = Python 3.0 = Py3K

• Python 2.6 코드가 수정 없이 Python 3.0 에서 동작할 필요 없음• Python 2.6 과 3.0 을 함께 지원할 필요가 있는 프로젝트의 개발 모델 제시

1. Full coverage 의 unit test 작성2. Py3k 경고 모드3. 테스트 . 경고가 뜨지 않을 때까지 수정4. 2to3 도구를 사용하여 코드 자동 변환 ( 수작업 금지 )5. 3.0 에서 테스트6. 문제가 발견되면 2.6 코드 수정 . Step 3 으로 .7. 때가 되면 각각의 버전 릴리스

• C 언어로 구현하며 , 완전히 새로 작성하기보다는 Python 2 코드 기반 활용

Guido van Rossum <guido at python.org>

05-Apr-2006

Page 14: Python 생태계의 이해

Python 라이브러리와 PyPI,패키지 관리자

Page 15: Python 생태계의 이해

Python 표준 라이브러리• 내장 함수 Built-in Func-

tions

abs() dict() help() min() setattr()

all() dir() hex() next() slice()

any() divmod() id() object() sorted()

ascii() enumerate() input() oct() staticmethod()

bin() eval() int() open() str()

bool() exec() isinstance() ord() sum()

bytearray() filter() issubclass() pow() super()

bytes() float() iter() print() tuple()

callable() format() len() property() type()

chr() frozenset() list() range() vars()

classmethod() getattr() locals() repr() zip()

compile() globals() map() reversed() __import__()

complex() hasattr() max() round()  

delattr() hash() memoryview() set()  https://docs.python.org/3/library/functions.html

Page 16: Python 생태계의 이해

Python 표준 라이브러리• 텍스트 프로세싱 : string, re, difflib, …• 데이터 타입 : datetime, calendar, collections, array, …• 수 계산 및 수학 관련 : numbers, math, random, …• 함수형 프로그래밍 : itertools, functools, operator• 데이터 영속성 (persistence): pickle, marshal, sqlite3, …• 데이터 압축 : zlib, gzip, bz2, …• 암호화 : hashlib, hmac• 동시성 : threading, multiprocessing, …• 인터넷 데이터 핸들링 : email, json, base64, …• 인터넷 프로토콜 : webbrowser, urllib, http, imaplib, …• …

https://docs.python.org/3/library/

Page 17: Python 생태계의 이해

PyPI

• [ 피 와이 피 아이 ] 또는 [ 치즈샵 ]• Python 소프트웨어 패키지에 대한 정보를 저장• 패키지를 릴리스• 각 패키지는 고유한 이름과 버전을 가짐• https://pypi.python.org/pypi

• 참고• https://wiki.python.org/moin/CheeseShopTutorial • https://python-packaging-user-guide.readthedocs.org/en/latest

/

Page 18: Python 생태계의 이해

PyPI Topic

• Software Development (20788)

• Internet (10035)

• Utilities (5629)

• Scientific/Engineering (4201)

• System (3351)

• Text Processing (1896)

• Database (1381)

• Communications (1189)

• Multimedia (1317)

• Office/Business (1283)

• Security (860)

• Games/Entertainment (382)

• Documentation (403)

• Terminals (323)

• Education (304)

• Text Editors (152)

• Artistic Software (105)

• Home Automation (114)

Page 19: Python 생태계의 이해

설치 도구• pip: PyPI 에 등록된 Python 패키지를 설치• virtualenv, pyvenv: 애플리케이션의 의존성 문제를 피하기 위해 격리• pip wheel: 차후의 설치 속도를 높이기 위하여 wheel 배포본의 캐시를 생성• 통합된 소프트웨어 스택 관리• buildout: 웹 개발에 특화• Hashdist• conda: 과학 커뮤니티를 주 대상으로 함

Page 20: Python 생태계의 이해

PIP (Pip Installs Python)

• PIP Python 2.7.9 이상 , Python 3.4 이상에 기본으로 포함• PyPI 로부터의 설치를 지원• 패키지 설치

$ pip install SomePackage # latest version$ pip install SomePackage==1.0.4 # specific version$ pip install 'SomePackage>=1.0.4' # minimum version

• 패키지 삭제$ pip uninstall SomePackage

• 설치된 패키지 목록$ pip list

• 패키지 검색$ pip search "query“예 : $ pip search hangul

https://pip.pypa.io/en/stable/user_guide.html

Page 21: Python 생태계의 이해

패키징 도구• setuptools: 프로젝트를 정의하고 소스 배포본을 생성• bdist_wheel setuptools: wheel 을 생성 . 바이너리 익스텐션을

포함할 경우에 특히 유용함• twine: 배포본을 PyPI 에 업로드

Page 22: Python 생태계의 이해

Python 언어의 구현체 및 배포본

Page 23: Python 생태계의 이해

Python 언어의 구현체 및 배포본• Python• 언어 명세• ≒ CPython

• Jython• PyPy• IronPython

Page 24: Python 생태계의 이해

CPython

• C 로 작성• Python 구현의 레퍼런스• C 언어 확장 기능을 활용• 버전• 3.4.3• 2.7.10

Page 25: Python 생태계의 이해

SciPy

• 수학 , 과학 , 공학을 위한 배포본• 다음의 모듈 포함• NumPy ( 다차원 배열 패키지 )• SciPy Library ( 과학 컴퓨팅을 위한 기반 라이브러리 )• Matplotlib (2D, 3D 플로팅 )• IPython (편리한 대화식 콘솔 )• Sympy (symbolic mathematics)• Pandas ( 데이터 구조 및 분석 )

http://www.scipy.org/

Page 26: Python 생태계의 이해

Anaconda

• 대규모 데이터 처리 , 과학 컴퓨팅• 주요 패키지 포함 (NumPy, SciPy, Pandas, IPython, Mat-

plotlib, …)• Python 2 & 3 • 패키지 관리자 (conda)• Cpython + conda + packages + α

• https://store.continuum.io/cshop/anaconda/ • 8 강에서 다룸

Page 27: Python 생태계의 이해

Jython

• Java 가상 머신에서 동작• Java 로 작성된 클래스 활용• Jython 2.7.0 릴리스 (2015년 5 월 )• http://www.jython.org/• 10 강에서 다룸

Page 28: Python 생태계의 이해

IronPython

• .NET 프레임워크와 통합된 Python 구현• .NET 프레임워크와 Python 라이브러리를 사용할 수 있음• 비주얼 스튜디오에서 사용할 수 있는 Python Tools

http://ironpython.net/tools/• Python 2.7

Page 29: Python 생태계의 이해

PyPy [ 파이파이 ]

1. Rpython 언어로 동적 언어의 인터프리터를 구현할 수 있게 해주는 프레임워크

2. RPython 으로 구현된 Pythonhttp://blog.dahlia.kr/post/5124874464

Just-in-Time compilation (dynamic translation)• 프로그램을 실행하는 도중에 컴파일• ahead-of-time compilation (AOT) 과 interpretation 을 결합

http://en.wikipedia.org/wiki/Just-in-time_compilation

Rpython• RPython 은 Python 의 제한적인 (restricted) 부분집합• 언어의 명세와 구현을 분리• Just-in-Time 컴파일러를 자동으로 생성

Page 30: Python 생태계의 이해

PyPy

• 속도 향상• 메모리 적게 사용• 호환성“ CPython 에서 돌아가던 것이 PyPy 에서 안 돌아가면 PyPy 의 버그다”• Stackless 모드• 버전

• PyPy 2.6.0 (Python 2.7 호환 )• PyPy3 2.4.0 (Python 3.2.5 호환 )

http://pypy.org/

http://speed.pypy.org/

Page 31: Python 생태계의 이해

Python 라이선스

Page 32: Python 생태계의 이해

Open Source Software 의 라이선스• 공통적 준수 사항• 저작권 관련 문구 유지• 제품명 중복 방지• 서로 다른 라이선스를 혼용할 때에는 호환성을 확인

• 라이선스에 따라 차이가 있는 사항• 사용 여부 명시• 소스코드 공개• 특허 관련 조항

오픈 소스 SW 라이선스 가이드http://korea.gnu.org/people/chsong/copyleft/osswlg.pdf

Page 33: Python 생태계의 이해

Python 의 라이선스• Python 역사와 라이선스 https://docs.python.org/3/license.html

• PSF (Python Software Foundation) 라이선스• Python 2.1 이상에 적용• https://

wiki.python.org/moin/PythonSoftwareFoundationLicenseFaq

• GPL 호환 라이선스• Python 을 GPL 하에서 배포된 다른 소프트웨어와 조합해 쓸 수 있다

Python 이 GPL 하에서 배포된다는 뜻은 아니다• 모든 Python 라이선스는 GPL 과 다르게 , 변경사항을 오픈 소스로 공개하지 않고도 변조된 버전을 배포해도 된다

Page 34: Python 생태계의 이해

PyPI 의 주요 라이선스• OSI Approved (38416)• PSF License (447)• CNRI Python License (48)• MIT License (11967)• BSD License (11240)• Apache Software License

(3375)• GPLv3 (1387)• LGPL (1205)• Zope Public License (982)

• Public … (459)• Free … (379)

• Other/Proprietary (281)• Database (24)• Internet (56)• Scientific/Engineering

(72)• Software Development

(109)• System (97)• Utilities (101)

https://pypi.python.org/pypi?%3Aaction=browse

Page 35: Python 생태계의 이해

Python 커뮤니티

Page 36: Python 생태계의 이해

Python 커뮤니티 , 소식

• 한국의 Python 사용자 그룹• https://www.facebook.com/groups/pythonkorea/• https://www.facebook.com/pyladieseoul • https://www.djangogirls.org/seoul/

• 소식• http://www.pythonweekly.com/• http://weeklypythonkr.tumblr.com/

Page 37: Python 생태계의 이해

PyCon

• http://us.pycon.org/2015/schedule/ • YouTube 채널 : PyCon 2015

https://www.youtube.com/channel/UCgxzjK6GuOHVKR_08TT4hJQ

• Keynote – Jacob Kaplan-Mosshttps://www.youtube.com/watch?v=hIJdFxYlEKE

• 파이콘 한국 (8 월말 ) http://www.pycon.kr/2015/

Page 38: Python 생태계의 이해

DjangoGirls Seoul

• https://www.djangogirls.org/seoul/• 여성을 위한 무료 프로그래밍 워크샵• 프로그래밍에 처음인 사람을 대상으로 함• 10 월 2~3 일• 구글 캠퍼스 서울

Page 39: Python 생태계의 이해

온라인 Python 강좌• edx.org

• CS For All: Introduction to Computer Science and Python Programminghttps://www.edx.org/course/cs-all-introduction-computer-science-harveymuddx-cs005x

• coursera.org• https://www.coursera.org/course/pythonlearn

• codecademy.com• https://www.codecademy.com/en/tracks/python

Page 40: Python 생태계의 이해

Q & A