최근 수정 시각 : 2022-09-23 16:57:12

Python

파이썬에서 넘어옴

파일:나무위키+유도.png  
파이썬은(는) 여기로 연결됩니다.
다른 뜻에 대한 내용은 파이선 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
이 문서는
이 문단은
토론을 통해 도서의 구체적인 이름은 네이버 책 서비스 기준으로 작성자가 다른 최근 1년 네티즌리뷰가 5개 이상이거나 1개 이상 대학에서 교육용으로 사용되고 있을 때 서술 가능하다. 이를 충족하지 않으면 서술에서 제거할 수 있다. 이미지는 등록하지 않는다.(으)로 합의되었습니다. 합의된 부분을 토론 없이 수정할 시 제재될 수 있습니다.
아래 토론들로 합의된 편집방침이 적용됩니다. 합의된 부분을 토론 없이 수정할 시 제재될 수 있습니다.
[ 내용 펼치기 · 접기 ]
||<table width=100%><table bordercolor=#ffffff,#1f2023><bgcolor=#ffffff,#1f2023><(>토론 - 도서의 구체적인 이름은 네이버 책 서비스 기준으로 작성자가 다른 최근 1년 네티즌리뷰가 5개 이상이거나 1개 이상 대학에서 교육용으로 사용되고 있을 때 서술 가능하다. 이를 충족하지 않으면 서술에서 제거할 수 있다. 이미지는 등록하지 않는다.
토론 - 합의사항2
토론 - 합의사항3
토론 - 합의사항4
토론 - 합의사항5
토론 - 합의사항6
토론 - 합의사항7
토론 - 합의사항8
토론 - 합의사항9
토론 - 합의사항10
토론 - 합의사항11
토론 - 합의사항12
토론 - 합의사항13
토론 - 합의사항14
토론 - 합의사항15
토론 - 합의사항16
토론 - 합의사항17
토론 - 합의사항18
토론 - 합의사항19
토론 - 합의사항20
토론 - 합의사항21
토론 - 합의사항22
토론 - 합의사항23
토론 - 합의사항24
토론 - 합의사항25
토론 - 합의사항26
토론 - 합의사항27
토론 - 합의사항28
토론 - 합의사항29
토론 - 합의사항30
토론 - 합의사항31
토론 - 합의사항32
토론 - 합의사항33
토론 - 합의사항34
토론 - 합의사항35
토론 - 합의사항36
토론 - 합의사항37
토론 - 합의사항38
토론 - 합의사항39
토론 - 합의사항40
토론 - 합의사항41
토론 - 합의사항42
토론 - 합의사항43
토론 - 합의사항44
토론 - 합의사항45
토론 - 합의사항46
토론 - 합의사항47
토론 - 합의사항48
토론 - 합의사항49
토론 - 합의사항50
||


프로그래밍 사이트 선정 상위 점유율 프로그래밍 언어 목록
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
{{{#!wiki style="display: inline-block; margin: 0 0 -5px; min-width: 25%"
{{{#!folding ⠀[ IEEE Spectrum 2021 ]⠀
{{{#!wiki style="margin:-6px -1px -10px"
<rowcolor=#fff> 웹 분야 상위 10개 프로그래밍 언어 모바일 분야 상위 10개 프로그래밍 언어
1 Python 1 Java
2 Java 2 C
3 Javascript 3 C++
4 C# 4 C#
5 Go 5 Swift
6 HTML 6 Dart
7 PHP 7 Kotlin
8 Dart 8 Scala
9 Ruby 9 Objective-C
10 Rust 10 Delphi
}}}}}}}}}
⠀[ Stack Overflow 2022 ]⠀
||<tablewidth=100%><width=2000><-4><bgcolor=#FFA500><tablebgcolor=#fff,#222> 2022년 기준 사용률 상위 25개 프로그래밍 언어 ||
1 JavaScript 14 Rust
2 HTML, CSS 15 Kotlin
3 SQL 16 Dart
4 Python 17 Ruby
5 TypeScript 18 어셈블리어
6 Java 19 Swift
7 Bash 20 R
8 C# 21 VBA
9 C++ 22 MATLAB
10 PHP 23 Lua
11 C 24 Groovy
12 PowerShell 25 Delphi
13 Go
⠀[ TIOBE 2022 ]⠀
||<tablewidth=100%><width=2000><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2022년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Swift
2 C 12 Classic Visual Basic
3 Java 13 Delphi / Object Pascal
4 C++ 14 Objective-C
5 C# 15 Go
6 Visual Basic .NET 16 R
7 JavaScript 17 MATLAB
8 어셈블리어 18 Ruby
9 SQL 19 Fortran
10 PHP 20 Perl
{{{#!wiki style="margin:0 -10px -5px; min-height: 26px"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1px -10px"
21 Scratch 36 Apex
22 Rust 37 PL/SQL
23 Visual FoxPro 38 Awk
24 SAS 39 Groovy
25 Lua 40 PowerShell
26 Ada 41 ABAP
27 Prolog 42 Simulink
28 Julia 43 Bash
29 Kotlin 44 Transact-SQL
30 LISP 45 Scheme
31 COBOL 46 RPG
32 Scala 47 Haskell
33 TypeScript 48 VHDL
34 Dart 49 Logo
35 D 50 ML
}}}}}}}}} ||
⠀[ PYPL 2022 ]⠀
||<tablewidth=100%><width=2000><-4><bgcolor=green><tablebgcolor=#fff,#222> 2022년 3월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB
2 Java 12 Kotlin
3 JavaScript 13 Go
4 C# 14 Rust
5 C/C++ 15 Ruby
6 PHP 16 VBA
7 R 17 Ada
8 Objective-C 18 ABAP
9 TypeScript 19 Dart
10 Swift 20 Visual Basic
}}} ||
프로그래밍 언어 목록 · 분류 · 문법

TIOBE 선정 올해의 프로그래밍 언어 / Python
{{{#!wiki style="margin:0 -10px -5px"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-6px -1px -11px"
2006년
Ruby
2007년
Python
2008년
C
2009년
Go
2010년
Python
2011년
Objective-C
2017년
C
2018년
Python
2019년
C
2019년
C
2020년
Python
없음
}}}}}}}}} ||


파이썬
Python
파일:Python 로고.svg
<colbgcolor=#646464><colcolor=#fff> 개발 단체 파이썬 소프트웨어 재단 (PSF)
라이선스 PSF 라이선스
최신 버전 3.10.7 (2022년 9월 6일 출시)
링크 파일:홈페이지 아이콘.svg

1. 개요2. 상세3. 특징
3.1. 디자인 철학3.2. 뚜렷한 권장 코드 스타일3.3. 순수 객체 지향3.4. 반복 가능한 객체
4. 장점
4.1. 빠른 개발 속도4.2. 피드백의 용이성4.3. 과학 및 공학 친화성4.4. 거대한 생태계4.5. 교육의 편의성
5. 단점
5.1. 느린 실행 속도5.2. 일반 사용자에게의 배포
6. 파이썬 구현체
6.1. CPython6.2. Pyston6.3. PyPy6.4. Jython6.5. IronPython6.6. Brython6.7. Transcrypt6.8. MicroPython
7. 개발 환경
7.1. 명령줄 인터페이스7.2. 통합 개발 환경7.3. 코드 편집기7.4. 노트북 편집기7.5. 패키지 관리7.6. 가상 환경7.7. 버전 관리 시스템
8. 주요 패키지
8.1. 코드 퀄리티 관리8.2. 수학8.3. 데이터베이스8.4. 데이터 처리 및 통계분석8.5. 그래프 그리기8.6. 머신 러닝8.7. 그래픽 사용자 인터페이스8.8. 웹 서버8.9. 확장 모듈8.10. 외부 함수 인터페이스8.11. 기타
9. 문법10. 학습
10.1. 유튜브10.2. 위키독스10.3. 도서
11. 여담12. 둘러보기

[clearfix]

1. 개요

#!syntax csharp
print("Hello, world!")
[1]
Life is short, You need Python.
인생은 짧다. 당신에겐 파이썬이 필요하다.[2]
1991년에 발표된 인터프리터 방식의 프로그래밍 언어다. 영어와 비슷해서 읽고 쓰기 쉬운 특유의 문법과 그로 인해 전 세계의 개발자들로부터 만들어진 수많은 패키지들 덕분에 사용할 수 있는 용도가 무궁무진해져 2010년대 중반부터 주류 프로그래밍 언어로 당당히 올라서게 되었다.

2. 상세

문법이 매우 쉬워서 작성하기에 간단하기 때문에 초보자들이 처음 프로그래밍을 배울 때 추천되는 언어이다. [3] 오죽하면 파이썬의 별명이 "실행할 수 있는 의사 코드(Executable pseudocode)"일 정도. 실제로도 미국 공과 대학교에서 컴퓨터 프로그래밍 입문 수업으로 파이썬을 많이 사용하기도 한다. 학습용으로 좋은 언어인 동시에 실사용률과 생산성도 높은 강력한 언어인 셈. [4]

창시자는 네덜란드의 프로그래머 귀도 반 로섬(Guido van Rossum).[5] 1989년 크리스마스 주에, 연구실이 닫혀있어서 심심한 김에 만든 프로그래밍 언어이다. 농담이 아니고 반 로섬을 유럽에서는 애덤 스미스에 비교할 정도며, 네덜란드에서는 기술자의 대명사로 취급된다. 프로그래밍계의 경제학자라나... 심심해서 만들었다는 것은 파이썬 서문마이크로소프트웨어와 한 인터뷰를 보면 알겠지만 사실이다. 능력 있는 기술자들은 대부분 심심할 때, 혹은 실수로 걸작을 만든다. 그리고 파이썬이라는 이름은 귀도가 즐겨 보던 영국의 6인조 코미디 그룹 몬티 파이썬에서 따왔다고 한다.[6]

실생활에서는 엑셀 자동화, 파일 처리 자동화, 웹 크롤링 자동화, 3D 모델링 자동화와 같이 업무 시간을 단축해 주는 언어로 활용할 수 있다. 수많은 VFX 프로그램들은 오래 전부터 파이썬을 스크립트 언어로 채택하고 있으며, 별도의 표준이 존재한다.물론 이 외에도 자동화하거나 만들 수 있는 것들은 끝없이 많다.

시중에서 가장 널리 알려진, 파이썬으로 만든 프로그램 중 하나가 드롭박스, 구글의 앱 엔진과 유튜브, 넷플릭스 등이 있다.[7]

파이썬 소프트웨어 재단(PSF)에서는 공식 문서로 파이썬 개선 제안(PEP)이라는 것을 작성하고 있다. 글 작성 순서에 따라 PEP 8, PEP 20과 같이 번호를 붙인다. 이는 파이썬 코드의 일관성과 발전 방향의 통일을 위해 작성하는 것으로, 이 PEP는 파이썬 커뮤니티에서는 성경 내지는 법전과 같은 존재로 자리 잡고 있다. 이렇게 명확한 코딩 가이드를 제공한다는 점은 다른 언어들과 확실히 구분되는 점이다.

3. 특징

3.1. 디자인 철학

"가장 아름다운 하나의 답이 존재한다" 를 기본으로 하고 있다.[8]

예를 들어 팩토리얼 함수는 다음과 같이 간결히 나타낼 수 있다. 이 예시에서는 3항 연산자(Ternary operator)도 쉽게 읽혀 파이썬의 "실행할 수 있는 의사 코드"라는 별명을 다시금 느낄 수 있다.[9]
#!syntax python
def factorial(x):
    return 1 if x == 0 else x * factorial(x - 1)
[* 더 쉽게는
#!syntax python
def factorial: return 1 if x == 0 else x * factorial(x - 1)
#!syntax python
factorial = lambda x: 1 if x == 0 else x * factorial(x - 1)
이런 식도 가능하다]
이것은 남이 작성한 코드를 내가 읽고 이해해야 하는 경우 아주 절실히 느낄 수 있다. PEP 20에서 제시된 파이썬 기본 철학(The Zen of Python)에 자세히 나열되어 있다.
  1. 아름다운 것이 추한 것보다 낫다. (Beautiful is better than ugly.)
  2. 명시적인 것이 암시적인 것보다 낫다. (Explicit is better than implicit.)
  3. 간결한 것이 복합적인 것보다 낫다. (Simple is better than complex.)
  4. 복합적인 것이 복잡한 것보다 낫다. (Complex is better than complicated.)
  5. 수평적인 것이 내포된 것보다 낫다. (Flat is better than nested.)
  6. 여유로운 것이 밀집한 것보다 낫다. (Sparse is better than dense.)
  7. 가독성은 중요하다. (Readability counts.)
  8. 특별한 경우들은 규칙을 어길 정도로 특별하지 않다. (Special cases aren't special enough to break the rules.)
  9. 허나 실용성은 순수성을 이긴다. (Although practicality beats purity.)
  10. 오류는 절대로 조용히 지나가지 않는다. (Errors should never pass silently.)
  11. 명시적으로 오류를 감추려는 의도가 아니라면. (Unless explicitly silenced.)
  12. 모호함을 대할 때, 이를 추측하려는 유혹을 거부하라. (In the face of ambiguity, refuse the temptation to guess.)
  13. 명확한, 그리고 가급적이면 유일한 하나의 방법은 항상 존재한다. (There should be one-\- and preferably only one -\-obvious way to do it.)
  14. 비록 그 방법이 처음에는 명확해 보이지 않을지라도[10]. (Although that way may not be obvious at first unless you're Dutch.)
  15. 지금 행동에 옮기는 것이 아예 안 하는 것보다는 낫다. (Now is better than never.)
  16. 비록 아예 안 하는 것이 지금 *당장* 하는 것보다 나을 때도 많지만. (Although never is often better than *right* now.)
  17. 구현 결과를 설명하기 쉽지 않다면, 그것은 나쁜 아이디어이다. (If the implementation is hard to explain, it's a bad idea.)
  18. 구현 결과를 설명하기 쉽다면, 그것은 좋은 아이디어일지도 모른다. (If the implementation is easy to explain, it may be a good idea.)
  19. 네임스페이스를 사용하는 것은 완전 좋은 생각이다! (Namespaces are one honking great idea -- let's do more of those!)

따라서 다른 언어들의 코딩 스타일은 각자의 취향에 맞게 발산 진화하는 반면, 파이썬은 위의 철학들을 만족시키는 하나의 스타일로 수렴 진화하는 성향이 있다.[11] 이런 성향은 다른 언어에는 없는 파이썬스러움(pythonic)이라는 독특한 개념을 낳게 되었는데, 복잡하지 않으면서 의미가 명확하고, 코드의 축약보다 뚜렷하게 보이는 흐름을 중시하는 파이썬의 철학을 지칭하는 개념이다.

3.2. 뚜렷한 권장 코드 스타일

특유의 철학 때문에 문법이 엄격한 편이다. 잘 작동하는지와는 별개로 가독성을 위해 이렇게 쓰기를 권장한다는 스타일 가이드까지 있다. 파이썬 공식 문서에서는 파이썬에 맞는 코딩 스타일을 지키기를 권장하는데, 이것이 바로 PEP 8이다.

블럭 처리 규칙
보통 다른 언어에서는 중괄호를 블럭 단위로 사용하지만,[12] 파이썬에서는 중괄호 대신 들여쓰기를 사용한다. 이 들여쓰기 문법 때문에 PEP 8에 명시된 공식 코딩 가이드에서는 소스 코드 들여쓰기에 탭(Tab) 문자 대신 공백(Space) 4문자를 넣기를 매우 강력히 권장한다.[13] 문자는 사용자나 시스템의 설정에 따라 서로 다른 폭의 공백이 생긴다. 문제는 파이썬 인터프리터가 탭 문자 하나를 공백 1문자로 처리한다는 것이다. 탭 문자로 들여쓰기를 처리하면 자신과 다른 탭 설정을 가진 편집기에서 코드를 열어 볼 경우 코드 들여쓰기가 높은 확률로 망가져 버리고, 그걸 교정해 보겠다고 들여쓰기에 공백 문자를 혼용하는 순간 해당 소스 코드는 사람이 고칠 수 없는 형태로(시각적으로는 블록이 맞지만 파이썬 인터프리터는 다른 블록으로 인식) 망가져 버린다. 물론 이렇게 스페이스 바를 네 번이나 치는 귀찮은 행위를 프로그래머들이 가만 놔둘 리가 없다. PyCharm, VSCode 등 파이썬 개발자들이 애용하는 최신 편집기는 탭 키 누르면 공백 4개로 자동 변환되어 입력되는 기능이 지원되므로 이들 편집기를 이용하면 공백 4개를 번거롭게 칠 필요가 없어진다.[14]
#!syntax python
def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)


작명 규칙
파이썬에서는 변수나 클래스 이름을 어떻게 짓든 잘 작동한다. 그렇지만 PEP 8 에서는 이에 대한 권장 스타일도 명시하고 있다.[예외] 파이썬을 코딩할 때에는 가독성을 위해 이 권장 스타일을 따르는 것이 좋다.
아래는 이름에 대한 대표적인 스타일 가이드이다.
  • 일반적으로 스네이크 표기를 쓰되, 특정한 종류에는 파스칼 표기를 쓴다. 표기법은 코딩 스타일 참고.
  • 변수는 소문자로 시작하며 [16], 내부변수(internal)는 맨 앞에 밑줄(underbar, _) 1개로 시작하며, 숨은변수(hidden)은 밑줄 2개로 시작한다.
    • attribute_name = 0
    • _protected_attribute_name = 0
    • __hidden_attribute_name = 0
종류 규칙 예시
패키지(package) 스네이크()
모듈(module) 스네이크() import module_name
클래스(class) 파스칼() class ClassName()
예외(exception) 파스칼
함수(function) 스네이크() def function_name()
상수(constant) 대문자+밑줄 MODULE_CONSTANT_NAME = 0
변수(variable) 스네이크 variable_name = 0
매개변수(parameter)
지역변수
인스턴스 변수(instance variable)
메쏘드(method) 스네이크() method_name()




문법 규칙: 아래는 권장되는 대표 유형이다.
  • 한 줄은 79글자로 제한하기
  • import는 파일의 맨 위에 적고 내장 모듈, 제3자 모듈, 직접 만든 모듈 순서로 불러들이기
  • 인스턴스 메서드의 첫 인자는 self로 쓰고, 클래스 메서드의 첫 인자는 cls로 쓰기
  • 할당 연산자(=)의 앞뒤로 공백 넣기

파이썬의 문법이 PEP 8을 지키는지 확인해 주는 파이썬 패키지도 있는데, Pylint와 Flake8이 대표적이다. 코드 스타일을 자동으로 권장 사항에 맞추어 수정해 주는 파이썬 패키지도 있는데, Black[17]이 대표적이다. PyCharm이나 Visual Studio Code 편집기를 사용할 경우에는 저 패키지들을 GUI를 통해 편리하게 사용할 수 있다.

3.3. 순수 객체 지향

파이썬에는 원시 타입(Primitive Type)이 존재하지 않으며, 모든 것이 객체로 취급된다. 나아가 클래스, 함수 역시 객체로 취급할 수 있다. 상수 역시 상수가 저장된 객체라고 본다. 다음과 같은 상수 할당문이 있을 때,
#!syntax python
x = 10

이는 변수 x 자체에 10이 할당된 것이 아니라 x가 10이 저장된 상수 객체를 가리키는 것을 의미한다. 내부적으로는 C의 포인터 연산과 같은 동작이 행해지는 것이다. 이렇게 x에 대입되는 값을 변경할 경우,
#!syntax python
x = 10
x = 20

x가 가리키는 대상이 10이 저장된 상수 객체에서 20이 저장된 상수 객체로 바뀐 것이다. x 자체의 값이 10에서 20으로 바뀐 게 아니다.
파일:2-4-4.png

파이썬 버전 3의 표준 타입 계층 구조에서 주요 자료형은 그림과 같다. 이 중에서도 크게 불변 객체(Immutable Object)와 가변 객체(Mutable Object)로 나눌 수 있다. 불변 객체에는 상수(숫자), 문자열, 바이트, 그리고 튜플[18]이 있다. 이 네 가지를 제외한 나머지 객체는 모두 가변 객체이며, 값을 수정할 수 있다. 불변 객체의 값을 수정할 때는 바뀐 값이 저장된 새로운 객체를 생성하고 참조 대상을 새 객체로 옮기는 식으로 동작한다. 이와 같은 특징 때문에 파이썬은 순수 객체지향 언어라고 할 수 있고, 이와 같은 순수 객체 지향 언어의 또 다른 예로는 Ruby가 있다.

다만 객체 지향 언어라는 표현은 주의해서 사용할 필요가 있다. 객체 지향은 어디까지나 프로그래밍 패러다임이므로, 파이썬이 객체 지향 언어임은 프로그램 작성이 항상 객체 지향으로 이루어진다는 의미는 아니다. 대부분 처음 파이썬을 배울 때는 절차 지향적으로 프로그래밍을 하게 되며, 심지어 함수형 프로그래밍도 할 수 있다.

함수의 매개 변수로 불변 객체를 넘겼냐 가변 객체를 넘겼냐에 따라서 함수 바깥에 있는 인자의 값도 수정할 수 있는지 없는지가 달라진다. 불변 객체를 넘겼으면 값의 복사만 일어나고 함수 바깥에는 영향을 주지 못하므로[19] '값에 의한 호출(Call by Value)'이 될 것이며, 가변 객체를 넘겼으면 함수 바깥에까지 영향을 줄 수 있으므로 '참조에 의한 호출(Call by Reference)'이 될 것이다. 파이썬 공식 문서에서는 파이썬의 인자 전달 방식을 '할당에 의한 호출(Call by Assignment)', 또는 '객체 참조에 의한 호출(Call by Object Reference)'이라고 명시하고 있다.

3.4. 반복 가능한 객체

파이썬의 가장 큰 특징 중 하나. 파이썬은 반복 가능한 객체(iterable)라는 강력한 기능을 제공한다. 이 객체는 집합, 문자열, 리스트, 튜플, 딕셔너리, 그리고 함수[20]까지도 반복이 가능하며, 이것을 for 구문에서 사용할 수 있게 해준다. 리스트와 튜플 등은 좀 편해지는 정도라 할 수 있지만, 함수의 값을 반복할 수 있다는 것은 큰 장점이다. 그 예로 n의 배수를 구하는 f(n) 함수가 있을 때,
#!syntax python
def f(n):
    x = 1
    while True:
        yield n*x
        x += 1

ot = f(2)
print(ot)
print(next(ot))
print(next(ot))

와 같은 함수를 만드는 것도 가능하다. 함수를 호출하고 나서도 함수가 완전히 끝나기 전까지는 지역 변수가 남아있으며, 함수가 끝나야 지역 변수가 삭제된다. 따라서 함수를 호출할 때마다 x의 값이 증가한다. 이렇게 만들어진 반복 가능한 객체는 \_\_next\_\_ 함수나 next(객체) 함수, 또는 for ... in 객체와 같은 문법들을 이용하여 순서대로 값을 호출할 수 있다. 특히 제너레이터의 경우, 미리 만들어놓는 게 아니라, 호출 될 때 반환값을 새로 만들어 반환하는 방식이기 때문에 메모리 관리 면에서도 이점이 있다.

4. 장점

4.1. 빠른 개발 속도

파일:xkcdpython.png
xkcd 353화

옛날 만화라 지금과는 다른 부분이 있는데, 파이썬 3.0부터는 print "Hello, World!"라고 쓰면 오류가 발생한다. 이제는 print("Hello, World!")라고 써야 한다. 참고로 저 만화는 파이썬 내에 이스터 에그로 삽입되기도 했다. import antigravity로 antigravity 모듈을 불러오면 나온다.영상

파이썬의 아이덴티티. 높은 생산성은 그 무엇과도 비교할 수 없는 파이썬만의 특징이다. 전 세계의 모든 프로그래밍 언어 중에서 파이썬 정도의 낮은 난이도를 가지면서, 범용성을 갖추고, 파이썬 수준의 프로그램 개발 속도를 따라잡을 수 있는 언어가 없다. 파이썬으로 만든 프로그램을 같은 객체 지향 프로그래밍 언어인 JavaC++로 만드려는 순간 숨이 턱 막힐 정도. 이런 언어들을 사용하려면 설계부터 난감해진다.

인터프리터 언어이면서 우수한 자료형과 다양한 모듈 등을 제공해 개발 기간이 단축되는 것이 특징. 'C언어로 2년 동안 완성하지 못한 프로젝트를 파이썬으로 한 달 만에 해냈다'는 극적인 경험담이 있을 정도다. 당장 파이썬의 집합 자료형 같은 경우 C언어로 구현하려고 하면 머리가 아파 온다. C언어와의 접착성도 좋기 때문에, 일단 파이썬으로 빨리 구현하고, 남은 시간에 속도에 병목이 되는 부분을 C++로 전환하는 전략을 내세우고 있다. 버전이 올라가면서 파이썬 자체도 그리 느리지 않게 되었다. 심지어 어셈블리어 같은 저수준 언어(Low level)도 파이썬에서 호출할 수 있다. 파이썬은 어지간한 다른 프로그래밍 언어들을 지원하는 호환성 덕분에 응용할 곳이 무궁무진하다.실행 속도만 빼고

개발 속도가 빠른 데에는 친절한 Traceback도 한몫한다. 코드를 실수로 잘못 짠 곳이 있다면, 어떤 스택을 통해 어떤 어떤 파일의 어떤 줄에서 어떤 함수에서 어떤 종류의 문제가 발생했는지 아주 자세하게 알려준다. 스택을 전부 보여주기 때문에 초보자에게는 당황스러울 수 있지만, 디버깅을 하다 보면 정말 편리하다. 아래는 오류(Exception) 발생 시의 터미널 출력 예시다.
Traceback (most recent call last):
  File "/path/to/example.py", line 4, in <module>
    greet('Chad')
  File "/path/to/example.py", line 2, in greet
    print('Hello, ' + someon)
NameError: name 'someon' is not defined

파이썬 가지고 스프레드시트데이터베이스까지 만드는 괴수들도 있다. 파이썬으로 SQL을 구현하는 건 불가능하다는 소리가 있었지만 우리의 Nerd들은 해내고 말았다. 2013년 파이썬으로 관리하는 DB 개념이 잡힌 이후 수많은 피드백 끝에 2015년 도전 성공. 심지어 2017년 프랑스의 중견기업에서 Python DB 프로젝트를 보더니 정말로 회사의 DB를 파이썬으로 관리하는 사업을 벌려서 DB화되지 못하고 저장되던 회사 내부의 파일형 자료들과 기존의 DB에 저장된 자료를 접합시키는 사업까지 했다 한다.

빠른 아이디어 구현이 생명인 연구소에서 각광을 받고 있고, 인스타그램, 유튜브, reddit 등이 파이썬을 주로 쓰고 있다고 알려져 있으며, 외국의 구인 사이트에도 파이썬을 할 줄 아는 사람에 대한 수요가 많다. 컴퓨터 관련이 아닌 이공계 전반에서 많이 쓰이는 MATLAB은 오픈소스가 아니라는 점이 최근 추세와 맞지 않아 입지가 좁아지고 있다.[21] CG 업계에서도 사실상 표준으로 사용되는 스크립트 언어이다. MEL, MAXScript 등 프로그램별로 자체 스크립트 언어들이 난립하고 있었는데, 현재는 파이썬 스크립팅을 주력으로 밀고 있다.

동적 타입 언어(Dynamically typed language)라는 점이 큰 프로젝트에서는 단점으로 작용하여 자료 구조 설계나 디버깅이 어렵다는 지적도 있다. 다만 "정적 타입 vs. 동적 타입" 논쟁은 서로의 장단점이 있으며 일종의 종교 논쟁으로 취급받는다. 일례로 OCaml 같은 강력한 타입 인터페이스(Hindley-Milner, System F 등)를 가진 경우, 모든 타입 에러(!)를 컴파일 타임에 잡아낼 수 있는 반면에, 모든 버그가 타입 에러는 아니기 때문에 여전히 테스트 및 디버깅 과정은 필요하며, 타입 시스템으로 인한 부담 때문에 빠른 구현에는 부담이 될 수 있다. 반면에 동적 언어는 빠른 구현의 이점이 있지만 타입 에러가 많이 나는 특징이 있다. 한마디로, 컴파일 언어의 경우에는 컴파일 시간에 잡아낼 수 있는 오류를 범하게 된다는 소리. 파이썬으로 parser를 많이 작성해 봤다면, 십중팔구 읽은 숫자를 string으로 저장했다가 나중에 연산을 했더니 연산이 불가능하다면서 에러가 나거나 이상한 결과가 나온 경험이 있을 것이다. 파이썬 3.5부터는 Type Hints를 이용해서 변수가 가질 수 있는 타입을 지정할 수 있게 되어 성능 향상에 도움은 안 되지만 가능한 오류를 쉽게 찾아낼 수 있게 되었다.

요즘은 가히 춘추 전국 시대라고 할 수 있을 만큼 새로운 언어와 프레임워크가 계속 등장하고 있으며, 아예 폴리글롯(Polyglot[22]) 프로그래밍이라는 용어가 등장하는 시대다. 당장 구글만 해도 C++, Java, 파이썬을 골고루 섞어서 쓴다고 알려져 있으며, 게임도 메인은 C++로 작성되었지만 스크립팅은 파이썬이나 Lua로 된 경우(시드 마이어의 문명[23], WOW 등)를 매우 쉽게 찾아볼 수 있다. 따라서 필요하다면 프로그래밍 언어를 가리지 않고 매우 능숙하게 사용할 수 있도록 공부해야 하며, 알고리즘, 디자인 패턴, 테스트 기법, 동시성 프로그래밍(멀티쓰레드, 멀티프로세스) 등의 필요한 지식을 훤하게 꿰고 있어야 제대로 된 프로그래머/개발자가 될 수 있다.

4.2. 피드백의 용이성

디자인 철학 자체가 가장 완벽한 하나의 아름다운 해답을 찾는 파이썬 특유의 철학을 찾다 보니, 문법 자체가 딱 떨어지게 표현된다. 이 때문에 다른 사람이 제안하고 만든 프로그램을 수많은 사람들이 보고 쉽게 접근할 수 있다. Perl 같은 경우는 Write Once, Read Never라고 불릴 정도로 피드백과는 담을 쌓았는데, 파이썬은 문법이 통일되어 있다 보니 Write Once, Read Infinitely가 되어버렸다. 그래서 프로그램 하나 만들면 다른 프로그래머들에 의해 엄청난 양의 피드백이 들어오게 되었고, 이는 곧 생산성 향상으로도 이어졌다. 괜히 파이썬이 시간이 갈수록 점유율이 상승하는 언어가 아닌 것이다.

4.3. 과학 및 공학 친화성

파이썬은 과학과 공학 분야에서 필요한 여러 기능을 기본적으로 제공한다. 우선 언어 자체적으로 64비트를 넘어가는 매우 큰 정수를 지원한다.[24][25] 또한 허수를 기본적으로 지원하며, 표준 라이브러리의 decimal, fractions 모듈을 사용해 소수점과 유리수를 정밀하게 다룰 수 있다. 따라서 이러한 기능을 다루는 암호학과 통계 분야에서 쓰기에 알맞다.

파이썬 생태계 또한 공학 및 과학 분야를 빵빵하게 지원한다. 복잡한 수치와 큰 데이터를 다루는 연산에 알맞은 NumPy, SciPy, pandas, 데이터를 그래프로 시각화하는 Matplotlib, 코드와 데이터를 함께 다룰 수 있는 Jupyter Notebook 등의 강력한 패키지와 도구를 사용할 수 있다.

파이썬 개발자들도 이러한 사실을 잘 알고 있기 때문에 언어 차원에서 관련 패키지를 위한 기능을 제공한다. 가령 Ellipsis (...) 상수는 사실상 NumPy 전용의 슬라이스 객체로 제공한다.[26] 또한 3.5부터는 행렬곱을 위한 @ 연산자가 추가되었다.

4.4. 거대한 생태계

파이썬으로 무언가를 하고 싶어지면 그걸 하기 위한 패키지는 인터넷 어딘가에는 반드시 존재한다. 사실상 못 하는 것이 없다. 웹사이트 서버를 구현하려고 하면 Python Web Framework를 쳐보자(Django, Flask 등). 기계학습 알고리즘을 쓰고 싶다면 python machine learning이라 검색하자(scikit-learn, TensorFlow, PyTorch). 얼굴 인식을 코드 몇 줄로 할 수도 있다(OpenCV). 기본적으로 설치되는 모듈인 tkinter 모듈을 이용하면 간단한 GUI 프로그래밍을 할 수 있다. 게임도 만들 수 있다(Pygame). 비주얼 노벨도 만들 수 있다. 웹사이트 크롤링도 할 수 있다.

4.5. 교육의 편의성

파이썬은 위의 특징 때문에 교육용 프로그래밍 언어로 각광받고 있다. 한국, 미국의 여러 대학교 프로그래밍 교육들은 개론 수업 언어를 C, C++나 Java에서 파이썬으로 옮겨가는 추세다.

주의할 점은 파이썬이 배우기 쉽다는 건 프로그래머 입장에서 나온 말이라는 것이다. 그마저도 다른 언어에 비해 비교적으로 쉽다는 뜻이지, 깊게 파고들어 가거나 특유의 '파이썬스러운'(pythonic) 코딩을 하려면 생각보다 신경 쓸 것도 많고 동적 언어에 익숙해져 있어야 한다.[27]
더욱이 컴파일러 없이 프로그래밍 하는 것은 깡초보에게 권장할 만한 것이 아닌게, 정적 언어에 대한 개념도 없이 동적 언어를 잡았다가는 오히려 더 헷갈릴 수 있다. 왜 마이크로소프트가 TypeScript를 만들었는지 잠시 생각해 보기 바란다. 더욱이 파이썬은 편집증이 의심될 정도로 객체 위주로 돌아가긴 하지만, 언어의 패러다임을 보면 절차 지향, 객체 지향, 함수형 모두 사용할 수 있는 언어다. 극단적으로 OOP를 지향하는 Java나 C#보다[28] 더 신경 써야 할 것이 많다는 이야기. 하여튼 프로그래밍 자체를 마냥 쉬운 것으로 생각하다면 큰코다친다. 프로그래밍을 쉽게 할 수 있는 것과 좋게 하는 것에는 큰 차이가 있으며, '좋은' 프로그래밍을 하는 것은 프로그래머의 '역량'에 크게 좌우된다.

5. 단점

5.1. 느린 실행 속도

우선 기본적으로 가장 아쉬운 점은 속도이다. 한 논문에 따르면, CLBG에서 제시한 10개의 벤치마킹을 돌려본 결과 파이썬은 C에 비해 71.90배의 시간, 2.80배의 메모리, 75.88배의 에너지를 더 소모한다고 한다.

느린 속도를 보완하기 위해서 보통 여러 가지 방법이 동원된다. 기본적으로는 파이썬 내장 모듈을 사용해서 멀티쓰레딩이나 멀티프로세싱을 구현한다. Scipy나 Numpy와 같은 모듈의 고속 계산 함수를 꺼내 쓰기도(Vectorize) 한다. 더 나아가서는 속도가 빠른 C와 같은 언어를 래핑(Wrapping)하여 작성하기도 한다. 전문적으로 개발할 때는 외부 패키지에 의존하지 않고 직접 작성한 코드에서 고속화를 하기 위해 자연스럽게 더 높은 난이도의 언어를 혼합해서 사용하게 된다. 이 경우 파이썬은 논리적인 부분을 담당하고, 래핑된 다른 언어는 반복 연산을 담당하게 된다. 대표적인 예시로 Numba나 Cython같은 제3자 솔루션을 적용하기도 하며, 흔히 인공지능 용도로 사용되는 Python 라이브러리인 TensorFlow 는 C++ 로 작성되었다. Python 을 이용하면 TensorFlow 를 '사용' 만 할 수 있을뿐이다, TensorFlow 의 로직 자체를 수정 및 커스텀 하기 위해선 반드시 C++ 코드에 손을 대야 한다.

이처럼 파이썬은 다른 언어에 비해 많이 느리기 때문에 프로그래밍 대회서 시간 제한 때문에 어려움을 겪기도 한다. 시스템을 건드리거나 반복 연산이 많은 것은 하기 어렵지만 python num 처럼 따로 모듈을 지원하기 때문에 크게 걱정할 필요는 없다. 하지만 python num을 사용해도 느린 건 느리다. [29]

GIL(Global Interpreter Lock)은 파이썬의 성능 저하를 얘기할 때 빼놓을 수 없다. 파이썬은 멀티쓰레딩을 지원하기 위하여 GIL을 도입하여 사용하게 되었다. 따라서, python 쓰레드 10개를 만들어도 실제 Pthread/윈도우 쓰레드가 10개가 만들어지긴 하는데, GIL 때문에 개중 동시에 하나밖에 안 돌아가는 기이한 구조를 갖고 있다. 물론, 내부적으로 IO작업이 있을 시 바로 다른 쓰레드로 문맥 교환을 해주고, 바이트 코트를 100번 실행한 다음에는 인터프리터 차원에서 다른 쓰레드로 교체해 주므로 동시 작업 비슷한 효과가 난다. 이것은 구현이 매우 쉬워지고 빠른 개발을 할 수 있다는 장점이 있으나, 다중 코어 CPU가 보편화된 2006년 이후에는 다중 코어를 제대로 활용하지 못하는 구조적인 문제 때문에 성능에서 밀린다는 평가를 받게 되었다. 만일 특정 프로그램에 순진하게 CPU 코어를 2개 이상 동원하려고 할 경우, 뮤텍스(MutEx), 즉 한 쓰레드에 여러 개의 CPU가 연산을 행하여 내부 정보를 오염 시키는 것을 방지하는 역할을 맡는 GIL이 병목 현상을 일으켜 코어 하나를 쓸 때보다 오히려 성능이 크게 저하된다는 것. 구글 내부에서 이미 가루가 되도록 까인 부분이다. 다만 GIL은 멀티프로세싱에서는 해당되지 않는 이야기다. 멀티프로세싱 모듈은 메모리를 완전히 분리해서 사용하기 때문이다.

일반적으로 기계어로 컴파일하여 사용하는 C, C++보다는 당연히 느리고, Lua, JavaScript, LISP 계열 언어 등 동적 언어들을 전체를 주욱 놓고 비교해 봐도 속도가 빠른 편은 아니다. 파이썬처럼 가상 머신 위에서 실행되는 Java, JavaScript 등의 언어들의 경우, 속도 문제를 극복하기 위해서 JIT 컴파일러를 도입했다. 파이썬의 사실상의 표준 구현체인 CPython은 JIT 컴파일을 도입하지 않았고, JIT 컴파일을 도입한 별도의 구현체인 PyPy가 등장했다. 통계 분야 등 특정 분야에서는 R과 같이 그 분야에 특화된 언어를 사용하는 것이 더 편리할 수도 있다.

더불어, 예전의 파이썬에는 CPU-bound한 쓰레드가 I/O-bound한 쓰레드와 함께 돌아갈 때, I/O-bound한 쓰레드가 실행되어야 할 상황에서도 context switch가 제대로 이루어지지 않는 문제가 있었다. 이 때문에 CPU-bound 쓰레드가 GIL을 지나치게 오래 점유하게 되면서 I/O 반응 속도가 느려지고, 다른 쓰레드는 GIL을 획득하려고 계속 시도하느라 CPU 시간을 낭비하게 되었다. 이에 대해 파이썬 전문가인 David Beazley가 2009년에 Mindblowing Python GIL이라는 강연에서 지적하였다.[30] 이후 Antoine Pitrou라는 개발자가 GIL을 뜯어고쳐 해당 문제를 해결하였고, Python 3.2부터는 새로운 GIL이 적용되어서 성능이 어느 정도 개선되었다.

단, CPU 부하가 큰 작업을 돌리는 것이 아니면 GIL을 체감하기는 생각보다 쉽지 않다. 다중 쓰레딩으로 CPU의 여러 코어를 최대한 이용하고 싶은 경우에는 GIL가 굉장히 아쉬운 이슈지만, CPU를 별로 쓰지 않거나 I/O가 주가 되는 작업은 유의미한 성능 차이가 없다. 게다가 어설프게 코어 몇 개 깔짝깔짝 이용해서 계산하는 것보다는 그냥 C언어로 모듈을 짜서 붙이는 게 더 빠르다. 즉, python에서 CPU를 많이 먹는 부분은 C 모듈을 짜서 붙이거나, 이미 C 모듈로 짜여있는 라이브러리를 사용하거나(Numpy, Scipy 등), 필요하다면 multiprocessing 모듈을 이용하여 멀티코어를 활용하는 편. 그 이상의 CPU-heavy한 작업은 처음부터 C, C++로 짜는 게 맞다.

하지만 대규모 연산의 멀티코어의 성능 향상을 보기 위한 것 말고도, I/O가 주가 되는 작업(즉, 여러 개의 I/O 이벤트를 기다리는 것)을 위해서 멀티쓰레드를 사용하는 경우가 많고,[31] 이런 경우에도 복잡한 동기화를 해야 하는 멀티쓰레딩을 사용하는 건 낭비이다. 왜냐하면 디버깅도 힘들 뿐만 아니라, 실제로는 I/O를 위해 기다리는 시간이 실제 I/O가 발생했을 때 필요한 처리 작업을 수행하는 시간보다 월등히 긴 경우가 많아 여러 개의 쓰레드를 관리하기 위한 자원만 낭비하는 꼴이기 때문이다.

따라서 GoErlang 같은 최근의 프로그래밍 언어들은 코루틴이란 개념을 도입해[32] 이러한 "event multiplexing"을 싱글쓰레드로도 구현할 수 있게 하고 있다. 특히 멀티쓰레딩할 때 필요한 각종 동기화 문제 없이 마치 싱글 쓰레드 코드를 짜는 것과 거의 동일한 방식으로 코드를 작성할 수 있으면서도 그러한 코드들이 "동시에" 동작하는 것처럼 실행해 주므로 프로그래머 입장에서 매우 편하다. 실제로는 각 이벤트에 필요한 처리를 하고 다음 이벤트가 발생하기 전까지 비는 시간에 다른 이벤트를 처리하는 코드를 실행시켜 주는 방식으로, 시분할과 비슷하지만 문맥 전환이 프로그래머가 작성한 코드에서 명시적으로 다음 이벤트를 기다려야 할 필요가 있을 때 협력적으로 발생한다는 차이점이 있다.

C 같은 언어에서 이러한 코루틴 지원이 잘 안 되는 이유는, 언어적 차원에서 함수 중간에 실행을 멈추고 다른 함수를 실행할 수 있게 해줘야 하는데 쓰레드 별로 stack이 1개밖에 없는 구조에서는 구현이 어렵고 하나의 함수로 짜야 할 내용을 여러 개의 callback 함수로 쪼개면 코드가 지저분해진다는 단점이 크기 때문이다. 이런 callback 형태를 사용하는 게 Node.js 개발 환경이다. 현재로써는 이런 콜백 방식이 유연하면서 퍼포먼스가 좋은 방식이지만 언어적으로 약간 더럽다. 위에서 기술한 Stackless Python에서 코루틴을 먼저 지원할 수 있었던 것도 이런 배경이 있다.

다행히 파이썬은 (stackless가 아니더라도) yield 키워드를 통해 함수 실행 흐름을 제어할 수 있다. 파이썬 3.4 버전부터는 표준 라이브러리의 각종 파일 입출력, subprocess, socket 통신 등의 기능들을 모두 코루틴화해 주는 asyncio 패키지가 기본 탑재되었다. Python 3.5 부터는 C#를 본딴 async 함수 선언자와 await 키워드가 포함되어 asyncio 라이브러리에 의존할 수밖에 없던 코루틴 기능을 다른 서드파티 라이브러리도 보다 쉽게 지원할 수 있도록 바뀌고, 코루틴 내부에서의 예외 처리 과정이 개선되었다.

요새는 특정 경우를 제외하면 자동으로 GIL을 on/off시켜 주는 것으로 보인다.

이걸 감안하면 입문은 쉽지만 마스터하긴 어렵고 또 c패밀리와 이질적인 문법으로 인해(java/javascript도 문법 자체는 c와 유사하다.) 범용성이 떨어져서 어느 정도 한계가 뚜렷한 언어라고 할 수 있겠다.

5.2. 일반 사용자에게의 배포

파이썬은 프로그래머가 곧 자기가 만든 프로그램의 이용자가 되기 위해 사용되며 발달해 왔기 때문에, 긴 역사에도 불구하고 일반 사용자에게 배포를 하는 과정이 간접적이고 복잡하며, 파편화되어 발달이 덜 되어 있다. 그나마 '파이썬 프로그래머'들에게 '파이썬 프로그래머'가 배포를 하는 방식은 몇 가지가 있으나, '순수한 사용자' 에게 '(파이썬으로 만든)기능'을 전달하는 수단에 있어서는 다른 언어들에선 상상하기 어려울 정도로 원시적인 측면이 있다.

'딱 6줄의 파이썬 코드로 컴퓨터 바탕화면이 뱅글뱅글 돌아가는 프로그램을 만들어 친구를 놀래키자!'....는 영상이다.
'단, 그보다 먼저 친구 컴퓨터를 꿰어차고 파이썬/코드 에디터를 설치한 다음 파이썬 패키지 인스톨러 pip과 시스템 제어 패키지와 기타 등등....을 다 깔아놓은 다음에!' 가 전제되어 있다는 것만 빼면.

대부분의 언어는 '프로그래머'가 '프로그래머가 아닌 사람'을 위하여 프로그램을 만들고, 그것을 받은 사람은 개발 도구 없이도 실행할 수 있는 것이 당연시되어 있다. 따라서 '프로그램을 만드는 도구'와 '프로그램을 실행할 수 있는 조건'은 분리되어 있다. 집을 사는 사람이 집과 함께 집을 짓는 과정에 필요한 시멘트, 포크레인, 덤프트럭, 크레인을 함께 인수받아야만 집에 입주할 수 있는 게 아닌 것과 같다.

예를 들어, C/C++와 같은 시스템 레벨에 가까운 언어는 기본적으로 OS와 함께 해당 언어로 만든 프로그램을 실행할 수 있는 환경이 갖춰져 오거나, 추가 기능이 필요한 경우에는 OS 제작사 등이 책임을 지고 최대한 불편하지 않게 설치할 수 있도록 만들어 놓는다. 예를 들어 게임을 설치하는 중 'Visual C++ 20xx Redistributable'(vc_redist.exe) 설치 프로그램이 자동으로 인스톨러와 연동되는 등으로.

JavaC#과 같은 '가상 실행 환경'을 통해 돌아가는 언어의 경우 해당 가상 환경이 얼마나 널리 보급되는지가 언어의 흥망을 좌우하는 매우 중요한 요소이므로, 해당 언어를 지원하는 단체나 기업에서 매우 공을 들여 최대한 쉽고 간단명료하게 설치할 수 있도록 최선을 다한다. Java의 경우 Java로 된 프로그램을 실행하기 위해서는 JRE[33]이라는, '자바 프로그램을 실행하기 위한 실행 환경'을 꼭 설치해 줘야 하지만, JRE는 깔끔하게 정돈된 공식 사이트에서 쉽게 다운받아서 다른 응용 프로그램 설치하듯이 '30억 개 장치에서 Java 사용'이라는 광고 문구를 보며 한 큐에 설치하는 것으로 모든 준비가 끝난다. 이마저도 JDK, JRE 등의 복잡한 구분 없이 그냥 Java를 설치한다고만 안내하는 등 설치를 까다롭거나 위협적으로 느끼기는커녕 지금 설치하는 게 정확히 JRE라는 점조차 몰라도 되도록 배려하고 있다. C#의 경우 마찬가지로 .Net 이라는 런타임 환경이 컴퓨터에 설치되어 있어야 하는데, .Net Framework나 .Net Core 같은 이름으로 쉽게 최신 버전 환경을 설치하여 사용할 수 있게 만들어 놓았으며 Microsoft Windows와 C#이 같은 Microsoft에서 개발되기 때문에 윈도우 신버전에는 당시 최신 버전의 .Net 환경이 기본적으로 내장되어서 나오고 업데이트조차도 윈도우 업데이트에 통합되어서 제공된다.[34] JavaScript 같은 경우엔 어쩌다 보니(?) 엄청나게 강력한 가상 실행 환경 그 자체가 된 웹 브라우저의 엔진을 사용하여 동작하기 때문에 다른 어느 언어보다도 폭넓게 보급되고 간편하게 활용될 수 있었다. 아예 크로뮴 엔진을 통째로 가상 실행 환경으로 갖다 써서 데스크톱 응용 프로그램을 만드는 Electron 같은 물건도 있을 정도.

반면 파이썬은 기본적으로 '파이썬을 설치하고 개발 환경을 구성한 사람이' '자기 컴퓨터나 자기가 관리하는 시스템 속에서 돌릴 프로그램을' '직접 만들어 쓰는' 것을 최대의 목적으로 발달해 왔기 때문에 '프로그램을 만드는 환경' 과 '프로그램을 돌리는 환경'이 사실상 구분되어 있지 않다. 이 때문에 '파이썬 프로그래밍 환경' 은 존재하고 다운받아 설치할 수 있지만, '이걸 깔면 파이썬 프로그램을 돌릴 수 있습니다' 라는 환경은 별도로 존재하지 않는다.[35] 메이저 버전별로 업데이트가 따로 되기 때문에 버전이 다르다면 따로 받아야 하는 건 덤이다(...)

이 말은 두 가지를 의미한다. 첫째, 다른 시스템에서 프로그램을 돌리기 위해서는 (정석적으로는) 만들 때 갖췄던 환경(파이썬 및 패키지)을 모두 다 똑같이 설치해 줘야 한다는 것. 둘째, 그 '환경'을 설치하는 과정은 기본적으로(정석적으로)는 일반인이 아닌 프로그래머가 쓰는 것을 전제로 만들어져 있다는 것.

실제로 Stackoverflow 같은 개발자 포럼에도 '파이썬 사용할 때는 좋은데 이걸로 만든 프로그램을 남에게 전달할 때는 어떻게 하죠?' 라는 질문에 가장 흔한 반응이 '그까이 꺼 터미널 띄워서 파이썬 설치하고 pip 깔아서 패키지 잘 인스톨해 주기만 하면 되는데요 뭘 쉽죠' 하는 식의 '파이썬을 설치하는 것은 쉽지 않느냐' 라는 전형적인 프로그래머 시각의 답변이 주를 이루고 있다.

그나마 이 과정을 자동화(프로그래머적인)하려는 몇몇 시도가 py2exe, Pyinstaller, cx_Freeze와 같이 '파이썬 패키지 환경을 모조리 압축해서 exe로 포장해 줄게' 라는 접근법이다. 당연하지만 파이썬 환경을 그대로 포장 이사하는 것이므로 파일 하나의 용량이 뻥튀기되기도 하고, 파이썬 언어 자체를 개발/관리하는 주체와는 무관하게 제3자들이 추진한 솔루션이기 때문에 나중에 나올 패키지들과 잠재적으로 호환되지 않거나 개발이 중단될 수도 있다. 특히 용량이 생각보다 큰 문제인데, 실제로 단순하게 파이썬 패키지 몇 가지만 포함시켜 묶어 놓으면 일반적으로는 수백 MB부터 많게는 수 GB 단위까지 커지는 경우가 부지기수다. 물론 이러한 방식의 접근은 Java에서도 별도 설치형 JRE를 퇴출시키기 위해 버전 10 이후로 채택[36]한 것이기도 하지만, 그쪽은 자체적으로 jlink라는 표준화된 방식을 제공하는 반면 파이썬은 표준화된 방식 없이 여러 사람들이 제각기 자신의 방법으로 백가쟁명하고 있어 여러 종류의 패키징 도구가 난립하고 있다는 점이 문제다.

게다가, 개발자야 자기가 사용하는 파이썬 설치 환경 하나만 가지고 있으면 되지만, 이런 식으로 패키징된 프로그램을 비 프로그래머가 여러 개 사용해야 한다면 각각의 프로그램마다 제각기 '자신용' 파이썬 환경이 통째로 딸려오게 된다. 비유하자면 고객이 패스트푸드 가게에서 치즈버거를 주문하면 치즈버거 전용 101호실에서 요리를 시작하고, 불고기버거를 주문하면 전기, 가스, 수도, 직원 등등이 완전히 별도로 갖춰진 불고기버거 전담 102호실에서 불을 켜고 요리를 시작하는 식이다.

파이썬이 '입문하기 쉬운' 언어로 부상하고, 특히나 AI/수리과학/딥러닝 등에 많이 사용되면서 '파이썬 사용자' 들 사이에서 프로그램을 교류하기 위한 궁리는 많이 진척되었다. 특히 Docker나 주피터 노트북 같은 솔루션은 '해당 환경을 갖추고 있는 사람에게는' 매우 쉽고 편하게 프로그램을 받아서 돌려볼 수 있는 도구이다. 그러나 역설적으로 '프로그래머가 되라고 권유하기 쉬운' 언어가 되어 가면서 '애초에 프로그래머가 아닌 사람을 위한 지원에는 관심이 거의 없는' 언어로 발달하게 된 것이 아이러니하다.

프로그래머들에게 쓰기 편하기 때문에 Make등의 패키지/프로젝트 관리용 스크립트로도 많이 배포된다.

6. 파이썬 구현체

영어로는 Python Implementation이다.

파이썬은 파이썬 소프트웨어 재단에서 만들고 관리하는 언어로서 이를 각 운영체제에서 돌리기 위한 표준 런타임도 같은 단체에서 제작한다. 그러나 성능, 확장성 등 다양한 이유로 같은 파이썬 코드를 다른 방식으로 돌리기 위한 비표준 구현체들도 다양하게 개발되어 있다.

비표준 구현체들은 반복 계산, 특수한 환경에서는 유용할지 모르나 일반적인 용도로 사용하기에는 제약이 많다. 스스로 모든 코딩을 한다면 모르지만 다양한 패키지들을 불러들어 사용할 때에는 예상치 못한 오류를 잔뜩 마주하게 되기 때문이다. 파이썬 패키지들은 CPython이라는 표준 구현체를 기준으로 제작되어 다른 구현체에서는 구조적으로 실행 자체가 불가능한 경우도 있다.

6.1. CPython

파이썬 소프트웨어 재단에서 만드는 표준 파이썬 구현체다.

보통 말하는 파이썬이 바로 이것이다. C 언어로 구현되어 있다. 그냥 부를 땐 Python이라고 쓰고, 다른 구현체와 구분하여 언급할 때는 CPython이라고 표기한다. 깃허브 저장소에서 소스 코드를 열람해 볼 수 있다.

6.2. Pyston

C++로 구현된 파이썬 런타임이다.

2021년 기준으로는 리눅스에서만 사용 가능하다.

Pyston은 LLVM 컴파일러를 사용한다. Pyston은 JIT(just-in-time) 컴파일러를 내장하여 반복되는 소스 코드를 빠르게 실행할 수 있다.

2014년 4월 프로젝트가 시작되었으며, Python 2.7 호환, x86 64비트 플랫폼을 목표로 개발 중에 있다. Dropbox Tech Blog - Introducing Pyston: an upcoming, JIT-based Python implementation (April 3, 2014)

Pyston은 C++로 작성되어졌다. Technical overview · dropbox/pyston Wiki · GitHub (1 Sep 2016)

우분투에서만 테스트되고 있다. 그러다가 2017년 1월 31일부로 Dropbox에서 공식적으로 스폰싱을 종료했다. Pyston 0.6.1 released, and future plans (January 31, 2017) 메인테이너가 Dropbox 직원인데 더 이상 참여를 못 하는 사실상 프로젝트 중단이다. 직후 프로젝트 리더였던 Kevin Modzelewski는 퇴사하였다.

성능은 상당히 훌륭한 편이었으나, CPython과의 호환성을 오랫동안 맞추지 못했고, 프로젝트가 시작됐을 때와 다르게 Dropbox의 코드가 Go랑 Python3로 많이 이전된 것이 원인으로 보인다(즉, 굳이 투자하면서 개발을 지속할 이유가 없는 상황). 또한 곧 Python2 버전이 공식적으로 지원이 중단될 예정이라서 완전하게 돌아가게 되는 시점(이조차 아무도 알 수 없었다)에서 이 프로젝트의 의미가 많이 퇴색될 수밖에 없었던 것.

DropboxPyston에서 PyPy로 옮겼다가 현재는 Go를 쓰고 있다. Dropbox Tech Blog: Open Sourcing Our Go Libraries (July 1, 2014)

홈페이지

6.3. PyPy

파이썬으로 만들어진 파이썬 런타임. 직관적으로는 느릴 것 같지만, JIT 컴파일을 사용하기 때문에 보통 파이썬보다 대부분의 경우에서 빠르다.
파일:상세 내용 아이콘.svg   자세한 내용은 PyPy 문서
번 문단을
부분을
참고하십시오.

6.4. Jython

Jython은 Java로 구현되어 JVM 위에서 실행된다.

# CPython이 C언어와 결합성, 접착성이 좋은 것처럼 Jython은 Java와 결합성이 대단히 좋으며, 실제로 Java 진영의 메이저 업체인 Oracle, IBM 등에서도 자사 제품에 Jython을 내장하여 스크립팅 기능을 제공하고 있을 정도다.

Jython은 JVM 위에서 실행되며, Python Module이 제공하는 API는 물론이고, JDK가 제공하는 모든 API를 그대로 사용할 수 있다. 오히려 pycrpyto와 같이 C언어로 구현된 CPython 모듈은 Jython에서 사용할 수 없다. 그러나 일단 Java Class라면, 설령 JNI로 되어있어서 C로 작성된 동적 모듈(*.dll, *.so 등)을 사용한다고 해도 Jython에서 사용하는데 아무런 제약이 없다. 또한 JVM 위에서 실행된다는 점 때문에 CPython의 GIL이 이식 되지 않았으며, CPython이 멀티쓰레드에서 보이는 단점이 Jython에는 존재하지 않는다. threading, threadsafety 등의 Python에서 제공하는 멀티쓰레드(락, 동기화 관련) 기능이 마음에 들지 않으면 java.util.concurrent에서 제공하는 Java API를 사용하면 된다!

가상머신에서 동작하는 구현체이다. 이렇게 시작부터 CLR 위에서 동작하는 파이썬 구현체를 도입하는 경우는 매우 드물다. 그래서 기존에 Java에서 개발되어 운영되던 프로그램이나 시스템이 존재하고, 이 환경 하에서 Python의 간결하고 편리한 기능과 높은 생산성을 도입하고자 할 때에만 사용된다.

CPython에 비하면 실행 속도가 매우 느리다. 따라서 주요 기능을 수행하는 데에는 문제가 있지만, 보조 기능에서 사용하면 번거로운 작업들을 매우 손쉽게 Python 스크립트로 Java의 자원을 그대로 끌어다 써서 할 수 있기 때문에 개발 공수와 편리함에서 큰 장점이 있다.

6.5. IronPython

Microsoft .NET Framework의 가상 머신인 CLR상에서 구현되고 이 위에서 동작하는 Python이다.

정확히 말하면 이들 동적 언어를 CLR 위에서 구현하기 위한 DLR이라는 프레임워크 기반이다. 제작자 Jim Hugunin#Jython의 제작자이며, NumPy의 전신인 Numeric 라이브러리의 제작자이기도 하다. 따라서 당연히 .NET Framework 환경에서 제작된 DLL과 결합성이 매우 좋다. Jython과 마찬가지로 병렬 프로그래밍 환경에서 GIL 때문에 고민할 필요가 없다.

자매품으로는 C#로 작성된 모듈을 마치 파이썬 모듈처럼 임포트해서 쓸 수 있는 Python for .NET이 있으며 이 경우에는 CPython 위에서 돌아간다.

6.6. Brython

웹 브라우저에서 파이썬을 사용할 수 있게 해 준다.

JavaScript로 구현되었고, JavaScript를 대신하여 웹 브라우저에서 스크립트 형태로 Python을 실행할 것을 목적으로 하는 'Brython'이 있다. Python3를 구현했으며, 다음과 같이 script 태그의 type을 text/python으로 지정하여 실행할 수 있다.

#!syntax python
<!DOCTYPE html>
<html>
<head>
  <title>Brython</title>
  <script src="brython.js"></script>
</head>
<body onload="brython()">
  <input id="zone"><button id="mybutton">click!</button>

  <script type="text/python">
    from browser import document, alert

    def echo(ev):
        alert(document['zone'].value)

    document['mybutton'].bind('click', echo)
  </script>
</body>
</html>

6.7. Transcrypt

홈페이지

타입스크립트와 비슷한 방식으로 파이썬 코드를 자바스크립트로 컴파일해서 일반적인 자바스크립트와 혼합하여 사용할 수 있게 해준다. (Ex. 파이썬 + jQuery)

6.8. MicroPython

홈페이지
공홈에서 제공하는 웹 에뮬레이터

파이썬3의 기능을 임베디드 보드에 최적화하여 구현한 프로그래밍 언어이다. Windows OS와 Windows Embeded OS와의 관계를 생각하면 이해하기 쉽다. 국내에서는 주로 마이크로비트보드에서 사용할 목적으로 많이 사용된다. 카시오 FX-9860 GIII에 탑재되어 있기도 하다.

다만 퍼포먼스적인 문제가 심각하게 있는데 아두이노 등의 다른 프레임워크와 비교할 경우 눈에 띄게 느리고 마이너한 모습을 보여준다.[37]

경쟁 플랫폼으로는 아두이노, .NET NANO 등이 있다.

7. 개발 환경

7.1. 명령줄 인터페이스

영어로는 CLI(Command Line Interface)라고 한다.
  • 터미널
    윈도우에서는 Command Prompt, 리눅스에서는 Bash, macOS에서는 터미널이라는 이름으로 들어 있다. 여기서도 간단한 코딩을 할 수 있고, 짧은 파이썬 코드가 잘 작동하는지 즉흥적으로 실험해 볼 수 있다.
  • IDLE
    파이썬 기본 탑재 콘솔로, 순수 파이썬으로 작성되었다. 콘솔과 같이 직접 명령을 입력하는 것 외에도 파이썬 스크립트를 직접 편집할 수 있으며, 문법 강조와 디버깅 등의 기능을 지원한다. 파이썬에 입문하는 경우에는 따로 텍스트 에디터를 설치할 필요 없이 IDLE만으로도 충분하다.

7.2. 통합 개발 환경

영어로는 IDE(Integrated Development Environment)라고 한다. 터미널, 디버거, 확장(Extension), 코드 편집기 등 개발에 도움울 주는 각종 기능들이 담겨 있는 앱을 가리킨다. IDE는 작업 중인 코드 상의 문제를 추적해 주거나 스타일 수정을 해 주는 패키지와의 연동을 통해 GUI 상에서 코드 퀄리티 관리를 자동으로 해 주는 편리한 기능도 제공한다.
  • Visual Studio Code
    Microsoft에서 만들어졌다. 2021년 기준 통계로 전 세계에서 가장 인기 있는 개발 환경으로 자리잡고 있다. 가장 인기있는 개발환경이라서 이것을 추천한다.
  • PyCharm
    JetBrains사에서 개발한 IDE로, 코드 컴플리션 기능이 우수하고 파이썬의 장점인 각종 프레임워크 지원이 가장 뛰어나다. 커뮤니티 에디션은 무료이지만 Django 같은 개발에 실질적으로 도움이 되는 툴을 쓰려면 프로페셔널 에디션을 사용해야 한다. 프로페셔널 에디션이 없더라도 플러그인 등을 통해 기본적인 html/javascript 문법 지원과 기본적인 자동 완성은 가능하지만, Django 전용 자동 완성(예를 들어 템플릿에서 파이썬 변수명을 자동 완성해 준다든지), 실시간 렌더링 및 디버깅 등의 기능 등은 전혀 사용할 수 없다. MS Visuall Studio Code가 나오기 전까지는 IDE에서는 독보적인 제품이었으나 이젠 그렇지 않다.
  • Spyder (소스코드)
    오픈 소스 IDE로 PyCharm 프로페셔널 에디션 같은 IDE를 쓰기 힘든 학생[38]이나 개인 개발자가 사용할 만한 IDE의 실질적인 대안인데 VS Code라는 더 좋은 대안이 있다.

7.3. 코드 편집기


개인 취향이나 프로젝트 성격에 따라 종합적인 IDE가 아닌 가볍고 빠른 코드 편집기를 더 선호하기도 한다. 파이썬 문법은 C나 Java처럼 Boilerplating이 별로 없기 때문에, 자동 완성 기능이 상대적으로 덜 중요하다. 개중에는 플러그인을 설치하여 IDE 못지않은 기능을 추가할 수 있는 경우도 있다.

7.4. 노트북 편집기

영어로는 Notebook이라고 부른다.

마치 블로그를 작성하듯이 코딩하는 특이한 개발 환경으로, 스타일 있는 문서 양식을 접목시킬 수 있다. 블로그를 쓰듯이 단락을 만들고, 그 안에 Cell을 만들어서 코드를 적어놓고, 실행시키면 Plot을 할 수 있다.

이런 것이 무슨 프로그래밍 도구인가 싶긴 하지만, 데이터 사이언스나 데이터 분석과 같은 분야는 완성된 시스템을 만들기보다, 파이썬 코드로 데이터를 어떻게 처리하면 되는지 프로토타입을 만들고 그것을 가지고 리포트를 쓰거나 프리젠테이션을 하는 일이 많기 때문에 종종 사용한다. 즉 이들에게는 하나의 완성된 프로그램을 만드는 것이 아니라 데이터를 이리저리 돌려보며 코딩 → 결과 확인 → 코드 수정 → 결과 확인 등의 반복적인 작업이 중요하기 때문이다. SymPy, NumPy, SciPy, Matplotlib 같은 수학, 과학, 머신 러닝 라이브러리를 자주 이용하는 환경에서 개발할 때 유용한 편이며, pandas 등의 라이브러리를 사용하여 데이터 분석을 하는 데도 사용한다.

공부하는 입장에서 스크립트 파일을 일일이 만들어야 하는 통상적인 개발 방식이 번거롭게 느껴진다면 차라리 Notebook을 이용해 각종 알고리즘을 공부해 보는 것이 좋다. 다만 소스 파일이 단순한 스크립트 파일이 아니라 거진 워드 문서 같은 수준이 되어 버리기 때문에 (Plot 같은 것을 바이너리 형태로 저장해야 하기 때문이다) 용량이 커지고 Git과 궁합이 맞지 않게 된다는 점은 단점이다. 또한 최소 백 줄이 넘어가는 프로젝트는 노트북으로 하면 안 된다. 노트북은 리포트를 쓰는 데에나 활용하고 진짜 개발은 파이썬 스크립트 파일을 작성해 하도록 하자.

7.5. 패키지 관리

  • PyPI
    파이썬의 공식 패키지 저장소이다. 2012년 파이썬 소프트웨어 재단에 의해 구축되었다.[43] 2021년 11월 기준 34만여 개의 패키지를 제공한다.[44] 아래와 같이 파이썬 패키지를 간단히 설치할 수 있다. 기본적으로 패키지를 모두 한곳에 설치하기 때문에 시스템에 내장된 파이썬에 영향을 주며, 프로젝트를 여러 개 관리할 경우 호환성 문제가 생긴다. 따라서 virtualenv와 같이 가상 환경을 다루는 도구와 함께 사용하는 것이 좋다.
    {{{#!syntax sh
pip install package
}}}
  • Anaconda
    사설 패키지 저장소로서, PyPI 못지않게 많이 쓰인다. 편리한 PyPI를 사용하지 왜 굳이 이런 사설 패키지 저장소를 사용하냐고 궁금해할 수도 있는데, 이는 시스템 의존성(Dependency) 때문이다. 특히 머신 러닝이나 GPU와 관련된 작업을 하거나 시스템 내부를 건드려야 하는 패키지들은 반드시 시스템 의존성을 운영체제 내부에 설치해야 하는데, PyPI는 그런 기능을 지원하지 않는다. Conda를 사용하면 운영체제나 아키텍처별 시스템 의존성도 알아서 설치해 주기 때문에 어떤 패키지들은 이쪽을 사용하는 것이 훨씬 낫다. 그런 패키지들은 공식 문서에서 아예 PyPI 대신 Conda를 통해 설치하는 것을 권장하기도 한다. 수학/과학/공학 업무에 필요한 NumPy, SciPy, Jupyter Notebook 등의 수백 개의 패키지와 도구를 한 번에 깔아줄 뿐만 아니라 GUI도 제공한다. 2020년부터 정부 및 200인 이상 기업에게는 유료로 바뀌었다. 통계나 데이터 사이언스, 인공지능 등의 분야 쪽 파이썬 입문자들에게 많이 추천된다. 다만 설치에 시간이 오래 걸리고, 어차피 몇백 개나 되는 패키지를 다 쓸 일은 없기 때문에 Conda 사용에 숙련되면 Miniconda를 쓰는 것도 좋다. Miniconda는 Anaconda와 기본 기능은 똑같지만, 기본 패키지들이 빠져 경량화되어 있다. 그래서 패키지를 자신이 직접 찾아서 깔아야 하지만, 어차피 필요한 패키지를 설치하는 것은 install <패키지명> 몇 번만 두드려 보면 간단히 해결된다.
    {{{#!syntax sh
conda install package
}}}
각종 파이썬 라이브러리를 설치하고 관리하는 도구이다. 몇몇 파이썬 라이브러리는 리눅스의 패키지 관리자로도 설치할 수 있지만, 파이썬 패키지 관리에 특화된 PyPI이나 Conda를 사용하는 것이 이후 패키지를 관리할 때 편리하다. 쓸데없는 라이브러리들이 함께 설치되거나 패키지 의존 관계가 꼬이는 것을 막으려면 하나의 패키지 관리자만 이용하는 것이 좋다. 단, Conda에는 등록되지 않아서 PyPI으로만 설치할 수 있는 패키지는 어쩔 수 없이 PyPI을 사용해야 한다. 그리고 PyPI로 설치할 수 없는 시스템 의존성(Dependency)이 있으면 Conda로 설치해야 한다.

리눅스와 같이 자체적으로 파이썬을 탑재한 운영체제에서는 호환성 문제를 특히 신경 써야 한다. 시스템에 내장된 핵심 도구들이 기본적으로 설치된 파이썬 라이브러리를 사용하기 때문이다. 만약 패키지를 설치하다가 호환성 문제가 생기면 최악의 경우 OS를 재설치해야 할 수 있다. 따라서 이런 OS에서는 시스템 내장 파이썬에 패키지를 설치하면 안 되며, 대신 install --user로 사용자별 기본 환경에 설치하거나 별도의 가상 환경을 만들어야 한다.

이렇게 파이썬으로 개발한 SW를 공개 배포하는 경우 소스 코드가 그대로 노출된다. 사실 이 부분은 오픈소스 생태계에서 아주 유리하게 작용했는데, 누군가 만들다 중단된 프로젝트를 포크(Fork)해서 프로젝트를 이어가거나 기존 코드를 들여다보고서 그 패키지에 대한 확장 기능을 어렵지 않게 개발할 수 있었기 때문이다. 코드에 대한 버그 신고나 커밋, 피드백도 파이썬 생태계의 발전을 견인한 한 축이었다.

상용 프로그램을 개발하거나 보안을 유지해야 하는 경우 파이썬 코드를 숨기는 것이 불가능하지는 않다. 가장 쉬운 방법은 byte code인 pyc파일로 변환하는 방법이다. 하지만, 이 방법은 조금만 노력하면 디컴파일이 쉽게 되기 때문에 코드를 숨길 수 없고 다만 코드 보기를 조금 어렵게 만드는 것으로 이해해야 한다. Pyc 파일보다 나은 방법은 PyInstaller를 사용하는 방법이다. PyInstaller는 Py 파일을 종속성을 분석해서 필요한 shared lib를 하나에 폴더에 패키징하고, EXE나 ELF의 실행 파일을 생성하여 소스 코드를 숨길 수 있다. PyInstaller로 패키징하는 과정에서 --key 옵션을 사용하면 AES256 으로 Bytecode를 암호화한다. 다만 이는 파이썬 자체 기능이 아니라 제3자 솔루션이라는 한계가 있다.

7.6. 가상 환경

한 컴퓨터 내에서 여러가지 프로젝트를 작업할 때, 필요한 버전이 다른 경우 프로젝트가 꼬일 가능성이 있다. 예를 들어 다음과 같은 상황을 가정하자. 프로젝트 projA에서는 모듈 mod의 1.0 버전에 있는 함수 funcA를 사용한다. 그런데 mod가 2.0 버전으로 업데이트 되면서 funcA가 사라지고 전혀 관련이 없는 함수 funcB가 생겼다. 이 때 또다른 프로젝트 projB에서 funcB가 필요하다. 이런 상황에서, mod를 2.0으로 업데이트 하면 projA를 실행할 수 없고, 업데이트를 하지 않으면 projB를 실행할 수 없다. 이런 때를 위해 필요한 것이 바로 가상환경이다. 파이썬 버전과 패키지를 다른 프로젝트와 완전히 분리해서 사용할 수 있는 별도의 환경을 제공해 준다.
VSCode 같은 일부 IDE에서는 가상환경이 감지될 경우 폴더 내의 해당 가상환경을 자동으로 잡아서 실행해준다. 경로는 사용자 마음대로 정할 수 있지만, 대부분의 경우 가상 환경 경로를 가상환경 설정 내장 모듈과 동일한 이름의 venv 경로로 설정한다. 이를 이용해서 GitHub Desktop 등의 git 관리 앱 중에는 파이썬 프로젝트의 .gitignore 파일에 자동으로 venv/ 를 추가해주는 앱도 있다.
  • venv
    파이썬 3.3부터 추가된 가상 환경 관리 내장 모듈이다. 내장이기에 파이썬만 설치하면 python -m venv <가상환경 경로> 라는 단 한 줄의 명령만으로 매우 간편하게 사용이 가능하다. 가상환경 설치 후 < 가상 환경 경로 >/bin/activate 을 실행하면 가상환경이 실행된다. 가상환경 실행 중 deactive라는 명령으로 바로 가상환경을 종료할 수 있다.
  • virtualenv
    파이썬 가상 환경 관리자로, 패키지를 마음대로 설치할 수 있는 가상 환경을 생성한다. 각 프로젝트마다 자신이 사용할 가상 환경을 만들어주면 프로젝트마다 필요한 패키지를 따로 설정해 주는 것이 가능하다.
    {{{#!syntax sh
virtualenv my-venv
# 특정 파이썬 버전으로 된 환경을 구성하려는 경우에는...
virtualenv my-venv --python=<특정 버전>
}}}
  • conda
    Anaconda나 Miniconda를 설치하면 사용할 수 있다.
    {{{#!syntax sh
conda create --name my-venv
# 특정 파이썬 버전으로 된 환경을 구성하려는 경우에는...
conda create name my-venv python=<특정 버전>
}}}

7.7. 버전 관리 시스템

버전 관리 시스템은 프로젝트 폴더 내 파일들의 변경 사항을 추적하고 개발 방향에 따라 분기도 나눌 수 있게 해 준다.

2021년 현재 전 세계적으로 대세 중의 대세는 Git이라는 버전 관리 시스템이다. 그렇지만 Git은 사실상 오로지 터미널 명령어로만 조작해야 해서 사용하기가 쉽지 않다.

그래서 Git을 활용한 클라우드 형태의 서비스가 많이 등장하게 되었다. 종류는 많지만 그중에서도 압도적인 점유율을 차지하고 있는 곳은 GitHub다. 제대로 코딩 작업을 해 보려면 일단 GitHub에 가입해서 회원 가입을 하고 저장소를 만든 다음 GitHub Desktop을 설치해서 본인의 컴퓨터로 해당 저장소를 Clone시키면 된다. 2021년 기준 사실상 파이썬뿐만 아니라 어떤 언어로 된 프로젝트를 진행하든 개발자들은 거의 다 GitHub를 사용한다고 보면 된다. 그만큼 타 사이트에 비해 기능이 압도적이다.

8. 주요 패키지

패키지, 라이브러리, 프레임워크. 사실 이 3가지 용어는 혼용되어 사용되는 측면이 있다. 굳이 구분을 해 보자면, 패키지는 여러 개의 모듈을 모아놓은 것이고 라이브러리는 여러 개의 패키지를 모아놓은 것이라고 보면 되지만, 사실 이 또한 모호하기는 하다. 프레임워크는 라이브러리와 달리 흐름의 제어를 사용자가 아닌 해당 프레임워크 내부에서 알아서 처리하는 것이라고 한다.

파이썬 그 자체로는 매우 깔끔한 언어지만 제3자 패키지들은 사용법 측면에서 파이썬의 기본 철학에서 조금씩 벗어나는 경우도 있다. 그래서 파이썬을 접하고 배우다가 이런 패키지들을 처음 활용하게 될 때에는 여기저기서 턱턱 막히게 될 수도 있다. 다만 그것도 파이썬 생태계의 패러다임을 알게 되면 그런가 보다 하면서 이해하며 쓰게 된다.

개발이 중단된 몇몇 오래된 패키지들은 현재의 패키지 설치 시스템을 아예 지원하지 않거나 다른 패키지와 충돌하는 경우도 가끔 있다. 이럴 땐 어차피 설치가 안 되니까, 그냥 같은 일을 해 주는 다른 패키지를 찾아보는 게 낫다.

8.1. 코드 퀄리티 관리

  • Black: PSF(파이썬 소프트웨어 재단)에서 직접 만든 코드 스타일 수정 도구다. 다른 스타일 도구에 비해 매우 엄격한 것이 특징으로, 타협하지 않는 스타일 정리기(The Uncompromising Code Formatter)라는 컨셉을 고수한다. 이 때문에 다른 검사 도구에 비해 설정할 수 있는 옵션의 개수가 매우 적다. 내가 원하는 코드 스타일이 아니라 Black이 강요하는 스타일을 따라가야 한다는 단점이 있지만, 대신 Black으로 처리한 코드는 누가 쓰든 비슷비슷해서 가독성은 매우 뛰어나게 된다. 개발자가 신경 써야 할 것을 최소화한다는 점 덕분에 후발 주자임에도 빠르게 인기를 얻었다. 어떤 식으로 코드를 자동으로 수정하는지는 여기에서 체험해 볼 수 있다.
  • Flake8: 속도가 아주 빠르다. 그리고 플러그인을 더 설치해서 원하는 검사 방식을 추가할 수도 있다. PyPI에 관련 플러그인은 100가지도 넘게 있다. 그 중 선별된 목록도 있다.
  • Pylint: 파이썬 코드를 검사하여 오류나 바람직하지 않은 문법을 잡아내는 도구이다.
  • MyPy: 파이썬을 위한 자료형 검사 도구의 원조로, 순수 파이썬으로 작성되었다.
  • Pyre: 페이스북에서 만든 자료형 검사 도구로, Ocaml로 작성되었다.
  • Pyright: 마이크로소프트에서 개발한 자료형 검사 도구로, TypeScript로 작성되었다. Visual Studio Code 플러그인을 정식 지원하며, 플러그인이 아닌 명령줄 도구로 사용하려면 Node.js를 설치해야 한다.
  • Pytype: 구글에서 만든 자료형 검사 도구이다.
  • autopep8: 파이썬 공식 스타일 가이드인 PEP 8에 맞게 코드를 고쳐준다.
  • yapf: 구글에서 개발한 스타일 검사 도구.
  • isort: import 문을 일관성 있게 정렬해 준다.

내가 작성한 파이썬 코드가 잘 쓰였는지 검사하거나 수정해 주는 패키지. 파이썬은 다른 언어에 비해 문법 규칙이 일관적이지만, 한 줄의 길이나 문자열을 감싸는 따옴표(""/'') 등 개발자 입장에서 논쟁거리가 될 만한 요소는 많다. 따라서 코딩 스타일을 통일하는 도구를 사용하면 여러 사람이 협업하면서 생기는 코드의 가독성 문제를 개선할 수 있다. 또한 코딩하는 중에도 오류나 바람직하지 않은 코드를 잡아낼 수 있는 편리한 기능을 제공하는 도구를 사용하면 버그를 일찍 잡아내고 테스트에 드는 노력을 줄일 수 있다.

코드 검사 도구의 한 갈래로 자료형 검사 도구(type checker)가 있다. 동적 언어라서 변수의 자료형을 따로 체크하지 않는 파이썬을 위해, 코드를 직접 분석하여 변수를 올바른 용도로 사용하는지, 특정 함수에 올바른 값을 전달하는지와 같은 정보를 검사한다. 비슷한 동적 언어인 JavaScript에 자료형 검사를 제공하는 TypeScript와 유사하지만, 컴파일이 필요한 TypeScript와 달리 파이썬은 언어 차원에서 type hint를 허용하기 때문에[45] type hint를 추가한 코드도 그대로 실행이 가능하다.

이 중 유명한 패키지들은 설치하고 나면 Visual Studio Code나 PyCharm과 같은 편집기에서 아예 GUI와의 연동을 통해 눈으로 코드의 상황을 볼 수 있도록 표시해 주는 기능을 사용할 수 있다. 이는 해당 편집기들이 코드 퀄리티 관리 도구 API를 자체 기능와 연결시켜 놓았기 때문에 가능한 것이다.

8.2. 수학

범용성을 지닌 수학 라이브러리들
  • 심파이(SymPy): 인수 분해, 미분, 적분 등 심볼릭 연산 기능을 제공한다.
  • 넘파이(NumPy): 통계, 선형 대수, 행렬 계산, 금융 운용 등을 포함한 과학 계산과 수학 작업. 수치 해석, 특히 선형 대수(linear algebra) 계산 기능을 제공하며 자료형이 고정된 다차원 배열 클래스(n-dimensional array)와 벡터화 연산(vectorized operation)을 지원한다. 참고로 Numpy는 C언어로 제작되어, 파이썬답지 않은 넘사벽 수준의 속도를 자랑한다. 꼭 수치 해석/선형대수 목적이 아니더라도 배열 형태의 데이터에 대한 처리 속도를 간단하게 높이는 야매 수준으로 사용할 수 있다.
  • 싸이파이(SciPy): 고성능 선형대수, 함수 최적화, 신호 처리, 특수한 수학 함수와 통계 분포 등 과학 계산용 함수를 모아놓은 파이썬 패키지이다. 고급 수학 함수, 수치적 미적분, 미분 방정식 계산, 최적화, 신호 처리 등을 위한 다양한 과학 기술 계산 기능이 제공된다.
  • einops: 물리에서 많이 쓰이는 einstein summation convention을 사용해 다차원 배열을 조작하는 함수를 제공한다. numpy의 einsum 함수와 비슷하나, reduce와 rearrange 계열 조작에 특화된 패키지.

8.3. 데이터베이스

데이터베이스 접근 관련 라이브러리

8.4. 데이터 처리 및 통계분석

빅 데이터, 통계학 라이브러리.

8.5. 그래프 그리기

수학이나 데이터의 시각화를 전문적으로 하는 라이브러리
  • 맷플롯립(matplotlib): 과학 계산용 그래프 라이브러리. Tkinter, wxPython, Qt, GTK+ 등의 그래픽 엔진을 사용할 수 있으며 그래프와 챠트 등을 그리기 위한 시각화 기능을 제공한다. API가 복잡하고 기본 스타일이 예쁘지 않다는 단점이 있으나, 커스터마이징이 제일 자유롭다는 장점이 있다. pylab이라는 서브패키지를 제공하여 MATLAB의 그래프 기능을 거의 동일하게 사용할 수 있다.
  • 씨본(Seaborn): matplotlib에서 지원하지 않는 고급 통계 차트를 그리기 위한 통계용 시각화 기능을 제공하는 시각화 라이브러리이다.
  • PyQtGraph: 단순한 그래프를 그릴 수 있게 해 준다. 이름 그대로 PyQt의 위젯 형태이기 때문에 PyQt가 같이 필요하다. 그릴 수 있는 그래프 종류가 다양하지는 않지만, 다른 패키지와는 달리 마우스 조작으로 그래프를 실시간으로 이리저리 볼 수 있는 속도가 특징이다.
  • 보케(Bokeh): javascript 기반으로 html 그래프 및 차트를 그릴 수 있는 시각화 라이브러리로, 주피터 노트북이나 웹상에서 인터랙티브하게 그래프를 보여줄 수 있다. 심지어 간단한 위젯과 함께 웹 앱을 제작할 수도 있다.
  • Plotly: bokeh와 비슷하게 반응형 html을 생성하는 라이브러리로, 동명의 js 라이브러리의 python 인터페이스이다.
  • Pygal: 시각화 라이브러리이다.

8.6. 머신 러닝

머신 러닝, 딥 러닝 전문 라이브러리
  • 텐서플로우(TensorFlow): 구글에서 오픈 소스로 공개한 기계 학습, 인공 신경망 라이브러리이다. 자세한 것은 해당 문서 참고.
  • 사이킷런(scikit-learn): 파이썬의 머신 러닝 라이브러리이다. 딥러닝보다는 데이터 전처리 및 classical machine learning 알고리즘 (SVM, decision tree기반 알고리즘 등)을 매우 편하게 이용할 수 있다.
  • 파이토치( PyTorch): 토치 기반의 기계 학습 라이브러리. 간결하고 구현과 성능이 빠르며 pythonic 한 코드 작성이 가능하여 TensorFlow보다 사용자가 익히기 훨씬 쉽다. 학계에서는 2017년부터 이미 파이토치가 텐서플로우보다 더 많이 언급되고 있다.
  • 케라스(Keras): TensorFlow, Theano, CNTK 등 딥 러닝 라이브러리를 백엔드로 사용할 수 있어 쉽게 다층 퍼셉트론 신경망 모델, 컨볼루션 신경망 모델, 순환 신경망 모델, 조합 모델 등을 구성할 수 있다. TensorFlow 등 다른 라이브러리에 비해 쉬운 문법이 특징. 현재는 TensorFlow2와 통합되었다.
  • jax: 구글에서 만든 다차원 배열 가속 라이브러리로, XLA(가속 선형대수) 컴파일러를 이용해 코드를 just-in-time 컴파일하는 기능 및 vectorize map과 같은 함수 transformation 기능을 제공한다. 머신 러닝 자체는 구현되어 있지 않으나, 머신 러닝 모델의 연산 백엔드로 많이 사용되므로 여기에 기술.

8.7. 그래픽 사용자 인터페이스

운영체제 종류에 구애받지 않는 GUI를 개발할 수도 있다. 물론 데스크탑 한정이다.

2021년 기준 실질적으로 Tkinter와 PyQt가 가장 많이 쓰인다. TKinter은 파이썬에 기본 내장되어 있으며 짧은 코드로도 원하는 걸 만들 수 있는 대신 단순하고, PyQt는 비교적 코드가 길지만 그만큼 세부적인 설정이 가능하며 Qt Designer이라는 앱으로 위젯을 이리저리 옮겨 창을 만들 수 있다.

PyQt와 PySide는 둘 다 Qt라는 크로스플랫폼 GUI를 만드는 방법을 개발하기 위한 별도의 프로젝트에 기반을 두고 있다. 이 중 Qt에서 공식적으로 지원하는 것은 PySide 쪽이지만, 이걸 사용하려면 C++ 지식도 겸비해야 한다는 한계가 있다.

8.8. 웹 서버

파이썬은 웹 서버[48]와 웹 어플리케이션(프레임워크) 간의 호환을 위해 크게 두 가지 규격을 제시하고 있다. 하나는 Java의 서블릿을 모방한 WSGI[49]이고, 다른 하나는 비동기형(async/await) 프로그래밍을 위해 만들어진 ASGI이다. 웹 프레임워크와 웹 서버를 선택할 땐 서로 호환이 되는지 확인해야 한다. 이 외에도 자체적으로 웹 서버를 제공하거나 독자적인 규격을 사용하는 프레임워크도 있다.

파이썬 서버의 프로토타이핑에만 주목하여 토이프로젝트에나 적합하고, 실제 서비스엔 쓰이지 않는다는 편견이 있으나 그렇지는 않 다. 파이썬이 다른 언어보다 상대적으로 느리긴 하지만 진짜 병목이 되는 네트워크 IO가 훨씬 더 느리기 때문이다. 실제로 인스타그램, 요기요 등은 아래 소개된 장고를 기반으로 개발되었으며, 스타트업 뿐만 아니라 거대 IT 기업에서도 일부 서비스를 파이썬으로 구현하는 경우가 늘고 있다. 물론, 파이썬 서버는 충분히 Trade-off가 고려된 상태에서 최선의 구조로 제작된 '좋은' 코드를 사용할 때 유용한 것이지 무턱대고 프로토타입 수준의 하룻밤 코드를 적용해도 괜찮다는 말은 아니다. 단적인 예로, 듀랑고의 서버에는 게임 시스템이 가진 복잡한 데이터 추상화를 표현하기 위해 파이썬으로 디자인한 알고리즘이 다량 사용되었는데, 동시 접속자 수가 크고 즉시반응성이 매우 높아야 하는 게임 서버의 특성상 파이썬 서버를 스케일업하는 데 매우 장벽이 되었다는 후문이다. 최근에는 컨테이너 기반 Scale-Out과 MSA가 보편화되어 있으므로 일부 루틴의 퍼포먼스는 실용적으로 극복 가능하다.

uvloop와 같은 몇몇 핵심 컴포넌트는 C/C++ 등으로 구현되어있기 때문에, 경우에 따라서는 자바 등으로 구성된 서버보다 좋은 퍼포먼스를 보이기도 한다.

아래는 WSGI 기반(동기형) 패키지들이다.
  • Django: 풀 스택 웹 프레임워크. 정식으로 비동기 프로그래밍이 가능한 것은 아니지만 ASGI 서버와도 부분적으로 호환이 된다.
  • Flask: 마이크로 웹 프레임워크. 가볍고 간단한 서비스를 만들기 좋으나, 복잡한 기능은 모두 플러그인을 설치해야 한다.
  • Bottlepy

아래는 ASGI 기반(비동기형) 패키지들이다.
  • Starlette
  • FastAPI: Starlette에 데이터 검사 라이브러리인 Pydantic을 얹고 이런저런 유용한 기능을 추가한 프레임워크로, API 서버를 빠르게 개발하는 데 알맞다.

8.9. 확장 모듈

영어로는 Extension Module이라고 한다. 확장 모듈은 C언어를 통해 파이썬의 실행 속도를 극적으로 향상시킬 수 있는 방법을 제공해 준다. CPython API (Python.h)를 통해 C로 작성되므로 CPython 구현체에 의존하는데, CPython은 C로 작성된 확장 모듈을 통해 파이썬에 내장된 함수나 객체처럼 사용할 수 있는 기능을 제공하기 때문이다. 구체적인 방법은 공식 문서에 나와 있다.

확장 모듈을 직접 작성하기 위해서는 C언어와 CPython API에 대한 상당한 지식이 요구된다. 그 예시가 궁굼하다면 numpy의 다차원 배열 소스 코드를 참고하자. 확장 모듈을 더 편하게 작성하기 위해서 아래에 서술된 패키지들을 사용할 수 있다.

다만 단순히 C로 작성된 라이브러리를 사용하는 것이 목적이라면 PyPy에서도 사용이 가능하고 호환성이 좋은 FFI를 사용하는 것이 더 바람직하다.
  • Cython: 싸이썬이라고 읽는다. 기존 파이썬 코드와 비슷한 문법으로 컴파일 과정을 통해 빠르게 실행할 수 있는 CPython용 확장 모듈을 제작하기 위한 패키지다. CPython의 속도를 높이고자 아예 C언어로 변환하여 컴파일하는 방법을 사용한다. 파이썬의 문법을 확장하여 정적 타입 선언 기능을 넣어, 기존의 C 코드를 쉽게 접착할 수 있도록 만들었다. CPython C API를 이용하여 C 코드를 직접 접착하는 기존의 방식보다 훨씬 사용하기 쉽고, C언어로 변환되어 컴파일된다는 점 때문에 ctypes의 오버헤드 없이 C와 호환되는 라이브러리를 직접 사용할 수 있다. [50] 이것을 제대로 사용하면 적게는 열 배 정도에서 많게는 천 배 이상까지 속도 향상(C의 속도)을 경험할 수 있다. Cython은 이미 작성된 파이썬 코드를 재활용하기 위한 목적이 아니라 C/C++로 작성된 코드를 사용하기 위함이며 기존 파이썬 코드를 그대로 사용할 경우 컴파일은 되지만 유의미한 성능 향상을 얻을 수 없다. C언어 코드를 파이썬 코드 사이에 섞어 넣을 수 있을 정도의 C언어에 대한 지식이 필요하다. 대표적으로 사용된 예시로는 비동기 이벤트 루프인 uvloop가 있다. 본인이 쓴 코드를 다른 사람들이 읽을 수 없게 하는 난독화(Obfuscation)에 이용되기도 한다.
  • pybind11
  • numba

8.10. 외부 함수 인터페이스

파이썬에서 C언어와 같은 다른 언어로 작성된 함수를 호출할 수 있도록 한다. 영어로는 FFI(Foreign function interface)다.

하는 일은 CPython의 확장 모듈과 비슷하지만 완전히 다른 개념으로 몇 가지의 차이점들이 존재한다.
  • 확장 모듈은 Python의 API와 자료형을 사용하고 FFI는 C의 자료형을 사용한다. 예를 들어 list의 모든 요소를 더하는 함수를 작성한 다면 확장 모듈 에서는 list 객체를 그대로 C로 보내어 CPython의 타입(PyListObject*)과 CPython API의 함수(PyList_GetItem)을 통해 list의 요소에 접근한다면 FFI에서는 파이썬에서 C배열을 할당하여 데이터를 복사한 후 C로 포인터를 전달한다.
  • 확장 모듈은 별도의 컴파일이 필요하고 FFI는 C 라이브러리를 날것 그대로 사용할 수 있다.
  • 확장 모듈은 파이썬 구현체에 독립적이고 FFI 코드는 다른 구현체(PyPy)에서도 사용할 수 있다.

FFI를 이용하여 C함수를 그대로 노출하는 것은 프로그램을 매우 난잡하게 만들 수 있으므로 C타입으로 형변환을 수행하는 Wrapper function이나 C의 포인터를 가지고 있는 Wrapper class를 작성하여 Pythonic한 코드를 작성하는 것이 중요하다.

아래는 FFI 라이브러리이다.
  • ctypes: 파이썬 내장 모듈이다.
  • cffi: 파이썬 파일 안에 C 선언 그대로 을 사용하는 혁명적인 방식을 제공하는 라이브러리이다. [51]

8.11. 기타

  • 뷰티풀 수프(Beautiful Soup): XML, HTML와 같은 구문 트리 또는 구조화된 데이터 처리를 위한 라이브러리이다.
  • dateutil: 복잡한 날짜 및 시간 형식을 다루는 라이브러리이다. 표준 라이브러리에 포함된 datetime만으로 해결하기 어려운 날짜/시간 문자열 처리나 국제 시간에 관련된 기능을 제공한다.
  • 셀레니움(Selenium): 웹 페이지 조작과 크롤링
  • 필로우(Pillow): PIL은 개발이 예전에 중지되었고, PIL의 포크(fork)인 Pillow가 그 역할을 대신하고 있다. Pillow를 쓰자. PIL은 Python Imaging Library의 머릿글자로 간편한 이미지 처리를 위한 라이브러리이다.
  • PyYAML: YAML 형식의 파일을 읽고 쓰기 위해 사용하는 라이브러리이다.
  • requests: HTTP 요청을 보낼 때 사용하는 라이브러리이다. 표준 라이브러리에 내장된 urllib 모듈에 비해 사용이 편리하고 기능이 뛰어나다.
  • tossi: 야생의 땅: 듀랑고를 개발한 왓 스튜디오에서 개발한 한국어 조사 처리 라이브러리. 같은 인물이 만든 korean 모듈을 대체했다.
  • argparser 터미널에서 명령어 parser 지원
  • Pygame - 파이썬으로 비디오 게임을 제작하기 위한 프레임워크이다.
  • 스크래피(Scrapy): 웹 스크래핑 및 크롤링

9. 문법

파일:상세 내용 아이콘.svg   자세한 내용은 Python/문법 문서
번 문단을
부분을
참고하십시오.

10. 학습

유튜브, 온라인 책, 도서, 코딩 공부 앱 중 본인에게 가장 쉬운 방법을 택하는 것이 좋은 학습의 첫걸음이 될 것이다.
책의 경우 온라인으로 볼 수 있는 책은 링크를 첨부하는 것을 원칙으로 한다.
다음은 유튜브, 온라인 책, 도서, 코딩 공부 앱에 대한 설명을 차례대로 첨부하였다.

10.1. 유튜브

  • 나도코딩
    초보자를 대상으로 한 강의는 370만 이상의 조회수를 기록할 만큼 매우 인기가 좋다. 채널 자체가 파이썬을 타겟으로 다방면인 사용법을 다루기도 하지만, 초보자를 위한 강의도 존재한다. 썸네일을 다소 자극적으로 하는 점이 특징(?)이다.
  • 생활코딩
    파이썬을 활용한 웹 서버 개발을 설명한다. 특유의 깔끔하고 비유적인 설명이 초보자에게 좋다. 다만 애초에 채널 자체가 웹 개발을 위주로 설명하는 곳이기 때문에, 파이썬을 이용한 웹 개발만 배울 수 있지 다른 분야에 대한 설명은 없다.
  • 조코딩
    점프 투 파이썬 교재를 활용한 강의를 진행한다.

10.2. 위키독스

실제 책과 동등한 수준의 내용을 온라인으로 편하게 배울 수 있다.

10.3. 도서

파이썬 관련 도서 중에선 2021년 현재까지도 이거다! 할 만한 명저가 없다. 프로그래밍 입문부터 실사용까지 오만 가지 책들이 난립해 있어서 핵심을 관통하는 주제를 딱히 잡기 어려워서인 듯하다. 파이썬 관련 책은 대형 서점에 가면 파이썬 분류가 따로 잡혀서 어마어마하게 난립해 있을 정도로 경쟁이 치열하다. 파이썬만 따로 분류가 잡혀서 매대를 꽉 채운 파이썬 책들을 보다 보면 춘추전국시대 저리가라 할 수준이다. 그러나 도서들이 죄다 특정 분야에만 치중해서 전반적인 내용을 관통한 책은 별로 없는 것은 문제다. Ruby 같은 경우는 기타 프로그래밍 언어에 Programming Ruby 딱 한 권만 달아놔도 재고가 없을 정도로 인기인 것과 정반대. 파이썬은 책이 워낙 많다 보니 서점에도 재고가 수두룩하다. 이렇게 파이썬 관련 책은 선택지가 많으니 인터넷에서 잘 비교해 보고 고르기를 추천.

Python 입문을 벗어나고 나면, 기계학습 분야로 갈 것이냐, 빅데이터 분야로 갈 것이냐에 따라서 추천 도서가 달라진다. 생활코딩에서도 이거 때문에 관련 문의가 페이스북 페이지에 올라오는 편이다. 빅데이터 분야(데이터 분석 분야)로 가는 데에는 책이 많은데 학원 교재로는 파이썬 데이터 분석 입문: 엑셀 및 CSV 파일 처리부터 데이터베이스, 시각화, 통계 분석, 자동화까지라는 책을 많이 쓴다. 이 분야에서 가장 많이 사용하는 Pandas에만 집중하고 싶다면 Pandas 프로젝트를 시작한 웨스 맥키니(Wes Mckinney)가 저술한 '파이썬 라이브러리를 활용한 데이터 분석'으로 시작해도 좋다.
  • 바로 쓰는 파이썬(기초편)
    서울대학교의 일부 강좌에서 학부 수업용 교재로 사용하기 시작하였다.
  • Do It! 점프 투 파이썬
    대한민국에서 입문 서적으로는 위키독스에 연재된 강의를 편집한 Do It! 점프 투 파이썬이라는 서적이 인기가 많다. 컴퓨터 과학 부문 베스트셀러 수준. 기초적인 내용을 다루며 대상 독자도 비전문가라 매우 깊이 있는 책이라 보기는 어렵고 어디까지나 입문 서적이다. 그리고 한국에서만 인기가 있고, 점프 투 파이썬 정도의 입문서는 너무나도 많다. 서점에 가면 매대에 깔린게 점프 투 파이썬 정도의 입문서들. 그러나 해당 책은 한국 국내에 커뮤니티가 형성(네이버 카페)되어 있어서 질문/답변이 빨라 베스트셀러에 올랐다.
  • 밑바닥부터 시작하는 딥러닝
    Python 기계학습 딥러닝 분야만큼은 명저가 하나 나왔다. 일본의 사이토 고키가 쓴 "밑바닥부터 시작하는 딥러닝"이라는 책이다. 원서 일본어로 나왔는데, 일본 내에서 사이토 고키가 직접 감수를 맡은 영어판이 같이 나와 이 영어판을 기반으로 미국에서 인기를 끌었다. 그리고 2016년 구글 딥마인드 챌린지 매치인공지능 분야가 한국 일반인에게 알려지면서 해당 도서가 2017년 한국어로 번역 출간되었다. 번역 질도 굉장히 깔끔해서 보기 좋다. 결정적으로 책이 두껍지 않고 얇다. 얇은 책인데 핵심만 집어넣어서 이론을 완성해 가지고 대통일 명저로 꼽힌다.
  • 파이썬 알고리즘 인터뷰
    Python으로 알고리즘 문제를 풀이하는 책도 나와 있다. 과거에는 알고리즘 대회나 코딩 테스트시 C++을 주로 사용해 왔으나 직관적이고 쉬운 문법으로 인해 Python이 점점 인기를 얻고 있다. 이 책은 국내 첫 출간된 Python 알고리즘 코딩 테스트 책으로 자료 구조와 알고리즘을 그림으로 도식화해 이해하기 쉽게 설명하고, 카카오 코딩 테스트 기출 문제 포함 주제별 다양한 알고리즘 코딩 테스트 문제를 다양한 각도에서 효율적인 방식으로 풀이하여 좋은 반응을 얻고 있다. 나무위키 또한 이 책에서 사용을 허락한 일러스트를 이용해 다양한 알고리즘을 효과적으로 설명하고 있다.

11. 여담

  • 구글에서 python이라고 검색하면 제일 위에 뜨는 게 바다 괴물이나 이 아니라 이거다.
  • 파이썬의 공식 문서는 정말 형편없기로 유명하다. 구체적으로는 직관성이 떨어지고 예시가 부실한 것이 그 이유인데, 꼭 필요할 때 읽으려면 헤매기 십상이다. 심지어 이는 국내도 아닌 영어가 모국어인 프로그래머들의 공론인데, 파이썬을 찬양하는 프로그래머들도 인정하는 부분이다. 다만 최신 버전으로 갈수록 가독성이 조금씩 개선되어 가고 있다.
  • 2014년 6월 WWDC에서 애플이 공개한 프로그래밍 언어 Swift보다 220배 느리다고 까였다. 유저들은 C 바인딩인 ctypes를 출동시킨다고 부들부들... 하지만 JIT 없는 동적 인터프리터 언어와 컴파일 언어의 성능을 비교하면 어떤 언어를 비교하더라도 당연히 후자가 압도적으로 유리하다는 점에서 이건 비교 자체가 잘못된 것이다. 게다가 암호화 같은 CPU heavy한 작업은 보통 다 C로 짜서 붙인다. 파이썬 해쉬 라이브러리인 hashlib만 해도 코어가 전부 C로 되어있다.
  • Google Android OS에서는 공식적으로 파이썬을 미지원한다. 하지만 SL4A나 Linux Emulator를 설치 후 파이썬 실행이 가능하다.
  • 만약 파이썬으로 짠 코드가 잘 작동되는 것을 넘어 가독성이 높고 유지 보수도 쉬운 코드라면 이를 파이썬다운(pythonic, 파이써닉) 코드라며 대우한다. 일반 프로그래머라면 이러한 파이써닉 코드를 지향해야 한다.
  • 띵소프트에서 개발한 페리아 연대기에서는 고대 언어라고 한다.
  • 파이썬의 창시자 귀도 반 로섬은 2013년에 재미있게도 한 헤드헌터로부터 경력직 파이썬 개발자 취업 제안을 받았다고 한다. 즉, 파이썬 창시자에게 파이썬 '경력직' 개발자를 구하는 수준의 메일을 보낸 것.
  • C++, Java와 함께 구글의 3대 개발 언어 중 하나로 알려져 있다.
  • 문명 4의 스크립트 언어로 쓰였다. Lua와 더불어 게임 스크립트 언어의 양대 산맥.
  • 심즈 4 역시 파이썬을 기반으로 해서 동작한다. 클라이언트를 살짝 보면 수많은 .pyo 파일들의 향연을 볼 수 있다. 심즈 4의 최적화는 나름 우수한 편. 근데 pyo가 3.5 버전에서 삭제되고 pyc로 대체되었다.
  • 킹덤 언더 파이어의 엔진에도 쓰였다. 500여 개의 자체 모듈이 누더기처럼 돌아갔다고 한다.
  • 월드 오브 탱크는 상당 부분이 파이썬으로 구현되어 있다. 유저가 작성하는 모드도 로직 부분은 파이썬으로 구현된다.
  • EVE 온라인은 파이썬의 경량/고속 실행 버전인 Stackless Python으로 작성되었다. 개발사 CCP Games는 파이썬 재단의 정식 후원자이기도 하다. 2000년대 초에 싱글코어 CPU가 계속 쓰일 줄 알고 서버 코드를 구 버전 파이썬으로 짰다가 다중 코어 사용이 힘들어지자[54] 눈물겨운 마개조를 거듭하여 파이썬이라는 언어가 제공할 수 있는 처리 능력을 한계치까지 뽑아서 쓰고 있다.
  • 파이썬패드 프로그래밍 기초 강의. 카이스트 프로그래밍 기초 과목과 호환되는 공개 강의이다. 인터프리터 설치 없이 기초적인 파이썬 사용법을 배울 수 있다.
  • NumPy+SciPy+matplotlib 조합이 과학 공학 계산용으로 자주 쓰인다.
  • 코드컴뱃 홈페이지. 파이썬을 게임의 형식을 빌려 배울 수 있는 사이트이다.
  • 객체 지향 프로그래밍을 배울 때 추천할 만한 언어이다. 많은 대학들이 C++ 환경에서 OOP를 가르치지만, 이 경우 필요한 객체를 만들어서 쓰는 실습이 많은데 대부분 이미 존재하는 객체를 가져다 쓴다는 개념을 이해하지 못하는 경우가 많다. STL을 쓰면 달라지지만 실습에서 STL을 요구하는 문제가 나오는 경우도 드물고, 주로 사용되는 문자열 변환, 배열 관련 연산 등은 파이썬에서 따로 임포트할 필요 없이 자료형 자체가 이미 클래스로서 편리하게 클래스 함수를 던져주기 때문에, 클래스의 재활용이라는 측면을 훨씬 이해하기 쉽다. 무엇보다 하루면 다 배울 수 있는 언어이기도 하고. 다만 대학들도 아무런 이유 없이 C++을 객체 지향 입문용으로 채택한 건 아니다. 많은 학생들이 프로그래밍 언어 중 C를 가장 먼저 배우기에, C++은 그나마 익숙한 개념들을 이용해서 객체 지향을 학습할 수 있게 한다. 물론 C++ 프로그래밍은 C 프로그래밍과는 패러다임 자체가 다르므로 주의가 필요하지만, 적어도 "C언어구조체 안에 함수를 정의할 수 있게 하면 C++이다"는 식의 낚시로 학생들에게 심리적 편안함을 줄 수는 있다. 최근에는 객체 지향 입문용 언어로 C++보다 파이썬을 먼저 가르치는 대학도 늘어나고 있는 추세라, 파이썬부터 먼저 공부하는 것도 나쁘지 않다.
  • 2014년 8월 30일, 유서 깊은 파이썬 행사인 PyCon이 드디어 한국에서도 성공리에 개최되었다. #공식 홈페이지
  • 2015년 8월 29일, PyCon 2015가 상암 누리꿈스퀘어에서 약 700명의 규모로 개최되었다. #공식 홈페이지
  • 2016년에는 PyCon APAC가 한국에서[55] 성공리에 개최되었다.#공식 홈페이지
  • 2017년에는 PyCon.KR 2017(파이콘 한국 2017)이 강남 코엑스에서 열렸다.(8.12~15)
  • 2018년에는 PyCon.KR에 참가한 IntelliJ IDEA로 유명한 JetBrainsPyCharm 프로젝트 매니저인 Dmitry Trofimov가 행사를 보고 PyCharm 한글화 오픈소스 프로젝트를 열었다. 그러나 번역이 20% 정도 되고 수년째 멈춰 있는 상태... 관심 있는 사람들은 기여해 보자. 다만 개발자들은 호환성을 위해서 영어 버전을 사용하는 경우가 대부분이라 기여를 할 사람이 있을지는 의문이다.
  • 2015년 7월 9일 "같이 번역해서 같이 봅시다"라는 표어를 내걸고 파이썬 문서를 한글로 번역하는 프로젝트가 생겼다. flowdas / 파이썬 한국어 번역
  • 도널드 글로버가 자신의 노래 가사에 Python을 배우라는 가사를 넣기도 했다.
  • 타오바오에서 다운로드 미러를 제공하고 있다.
  • 귀도 반 로섬은 2019년 10월 30일부로 드랍박스에서 나오고 은퇴하였다.
  • 그리고 2020년 11월 13일, 은퇴 생활이 지루하다며 다시 마이크로소프트 의 개발팀에 합류했다.
  • 디시인사이드 마이너 갤러리파이썬 마이너 갤러리가 있었으나 접근 제한 조치되어 아카라이브 파이썬 채널로 이주하였지만 얼마 안 돼 아카라이브에서도 제한 조치되었다.
  • 투어라이브의 백엔드 기술의 대부분은 파이썬으로 구현되어 있다.
  • 2020년 5월, 3.9부터는 비스타와 7을 지원하지 않는다.
  • 파이썬 창시자 귀도 반 로섬은 2021년 파이썬 회담(Python Language Summit)에서 버전 3.11에서는 속도를 2배 향상시키고, 향후 4년간은 속도를 5배 향상시키는 것이 목표라고 말했다.
  • 중국에서는 Chinese Python이라는, 중국어 문법으로 한자를 쳐서 돌아가는 언어를 개발하기도 했다.
  • 온라인에서 실행시켜 볼 수도 있다. 이 사이트에서 가능하다.
  • py-script: 상기한 Anaconda를 만든 동명의 회사에서 만든 WebAssembly 프레임워크이다. WA 프레임워크를 왜 파이썬 문서에서 설명하냐면, WA를 통해 무려 HTML 문서의 파이썬 코드를 브라우저에서 실행할 수 있도록 만들어주기 때문이다! 아직 베타 버전이기 때문에 호환도 완벽하지 않고 속도도 아쉽지만, 지켜볼만한 가치가 있는 프로젝트이다. 예시 사이트에서 다양한 예시를 볼 수 있다. GitHub repository
  • 파이선 모듈중 하나인 farfile에 사용자의 파일을 멋대로 덮어쓸 수 있는 취약점이 발견되었다. 사실 15년전부터 보안에 문제가 있는 모듈임이 알려져 있었으나 개발자노트에 경고문만 남겨둔채 방치한 결과 깃허브에서만 최소 35만개의 리포지터리가 취약점이 있는 것으로 밝혀졌다.

12. 둘러보기

{{{#!wiki style="margin: -5px -10px; padding: 10px 0px; color:#fff; background-image: linear-gradient(to right, #33CCCC , #0066DC); word-break:keep-all"
컴퓨터 과학 & 공학
Computer Science & Engineering

{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-8px -1px -11px"
<tablewidth=100%><colbgcolor=#eee,#555>기반 학문<colbgcolor=#fff,#1f2023>수학 (공업수학 · 해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 대수학 (환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학 (형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학
SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술기계어 · 어셈블리어 · C(C++ · C#) · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍(디자인 패턴) · 해킹 · ROT13 · OTP · IoT · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화
연구및 기타 문서논리 회로(보수기 · 가산기 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 디자인 패턴 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 정보처리이론 · 재귀 이론 · 자연 언어 처리(기계 번역 · 음성인식)}}}}}}}}}

프로그래밍 사이트 선정 상위 점유율 프로그래밍 언어 목록
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
{{{#!wiki style="display: inline-block; margin: 0 0 -5px; min-width: 25%"
{{{#!folding ⠀[ IEEE Spectrum 2021 ]⠀
{{{#!wiki style="margin:-6px -1px -10px"
<rowcolor=#fff> 웹 분야 상위 10개 프로그래밍 언어 모바일 분야 상위 10개 프로그래밍 언어
1 Python 1 Java
2 Java 2 C
3 Javascript 3 C++
4 C# 4 C#
5 Go 5 Swift
6 HTML 6 Dart
7 PHP 7 Kotlin
8 Dart 8 Scala
9 Ruby 9 Objective-C
10 Rust 10 Delphi
}}}}}}}}}
⠀[ Stack Overflow 2022 ]⠀
||<tablewidth=100%><width=2000><-4><bgcolor=#FFA500><tablebgcolor=#fff,#222> 2022년 기준 사용률 상위 25개 프로그래밍 언어 ||
1 JavaScript 14 Rust
2 HTML, CSS 15 Kotlin
3 SQL 16 Dart
4 Python 17 Ruby
5 TypeScript 18 어셈블리어
6 Java 19 Swift
7 Bash 20 R
8 C# 21 VBA
9 C++ 22 MATLAB
10 PHP 23 Lua
11 C 24 Groovy
12 PowerShell 25 Delphi
13 Go
⠀[ TIOBE 2022 ]⠀
||<tablewidth=100%><width=2000><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2022년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Swift
2 C 12 Classic Visual Basic
3 Java 13 Delphi / Object Pascal
4 C++ 14 Objective-C
5 C# 15 Go
6 Visual Basic .NET 16 R
7 JavaScript 17 MATLAB
8 어셈블리어 18 Ruby
9 SQL 19 Fortran
10 PHP 20 Perl
{{{#!wiki style="margin:0 -10px -5px; min-height: 26px"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1px -10px"
21 Scratch 36 Apex
22 Rust 37 PL/SQL
23 Visual FoxPro 38 Awk
24 SAS 39 Groovy
25 Lua 40 PowerShell
26 Ada 41 ABAP
27 Prolog 42 Simulink
28 Julia 43 Bash
29 Kotlin 44 Transact-SQL
30 LISP 45 Scheme
31 COBOL 46 RPG
32 Scala 47 Haskell
33 TypeScript 48 VHDL
34 Dart 49 Logo
35 D 50 ML
}}}}}}}}} ||
⠀[ PYPL 2022 ]⠀
||<tablewidth=100%><width=2000><-4><bgcolor=green><tablebgcolor=#fff,#222> 2022년 3월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB
2 Java 12 Kotlin
3 JavaScript 13 Go
4 C# 14 Rust
5 C/C++ 15 Ruby
6 PHP 16 VBA
7 R 17 Ada
8 Objective-C 18 ABAP
9 TypeScript 19 Dart
10 Swift 20 Visual Basic
}}} ||
프로그래밍 언어 목록 · 분류 · 문법

TIOBE 선정 올해의 프로그래밍 언어 / Python
{{{#!wiki style="margin:0 -10px -5px"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-6px -1px -11px"
2006년
Ruby
2007년
Python
2008년
C
2009년
Go
2010년
Python
2011년
Objective-C
2017년
C
2018년
Python
2019년
C
2019년
C
2020년
Python
없음
}}}}}}}}} ||




[1] 클래스 선언도 필요없다. 다른 언어의 1/3 수준의 코드 분량이다. 물론 짧은 코드 한정.[2] 파이썬의 엄청나게 빠른 개발 속도와 생산성을 두고 개발자들 사이에서 유행처럼 퍼진 말이다.하지만 느려터진 실행 속도와 기적의 실행 파일 용량을 보면...[3] 이런 쉬운 문법이 코딩 입문자들에게 '나만 안 된다' 라는 생각을 가지게 할수도 있어서 그렇게 장점은 아니다.[4] 파이썬의 이런 두 마리 토끼는 교육용 프로그래밍 언어인 BASIC이 쇠퇴하게 된 결정적인 이유이다. 파이썬은 BASIC과 달리 학교에서 배우고 끝나는 게 아니라 현업에서도 자주 쓰이는 언어이기 때문이다. 농담이 아니고 파이썬이 교육용 언어로 자리 잡으면서 베이직은 마이크로소프트에 의해 산소 호흡기를 달고 연명만 하는 신세가 됐다. MS가 없으면 BASIC은...[5] 귀도 반 로섬은 영어식 발음으로 네덜란드어 발음은 '휘도 판-로쉼'이다.[6] 지금 CPython의 공식 GitHub 저장소를 보면 협업 보조용 봇 이름들이 the-knights-who-say-ni(니라고 말하는 기사)나 bedevere(베디비어) 같이 죄다 몬티 파이튼의 성배의 배역들이다. 많은 파이썬 교재들에서 변수 이름을 spam, eggs로 짓는 등 드립을 친다. 직접적 관계는 없지만 42도 필수요소. 또한 시작 프로그램 중 하나의 이름이 아이들(Idle)인데, 탄생 배경을 생각해 본다면 몬티 파이썬의 멤버 에릭 아이들(Eric Idle)의 이름에서 유래하였을 가능성이 높다. 물론 사전적 의미를 생각 안 하는 건 아니라서 심볼마크가 모양이다. 실제로 누가 트위터로 에릭 아이들에게 파이썬의 이름을 유래를 알려주자 아이들은 "파이썬이 뭔지는 잘 이해하지 못하지만, 매우 고맙다고 생각한다. 참고로 스팸메일의 유래가 어디서 나왔는지도 생각해 봅시다!"라고 트위터로 쓰자 귀도 반 로섬이 직접 리트윗을 하면서 파이썬이 무엇인지 설명해 주고 자기는 아직도 몬티 파이썬을 즐겨 본다고 한다.[7] 물론 파이썬만으로만 작성됐다는 것은 아니고, 메이저하게 쓰인 언어가 파이썬이라는 것.[8] Perl의 '하나 이상의 해결법이 존재한다'과는 대비된다.[9] C와 Java에서 쓰이는 3항 연산자(ternary operator) ?:에 비해 훨씬 직관적이다. 하지만 이런 표기가 직관적이라는 건 'A if B (B라면 A다)'라는 식으로 조건을 뒤에 표기하는 경우가 많은 라틴어권 사용자들에 해당하는 이야기고 다른 언어권이라면 조건 여부에 따라 참:거짓으로 구분되는 3항 연산자 표기가 이해하기 편할 수 있다. 거기에 더불어 ? : 에 비해 if else 형태로 입력이 길어지는 부분을 싫어하는 경우도 있다.[10] 원문에는 "네덜란드인이 아닌 이상" 이라는 농담조의 조건이 붙는데, 아마도 파이썬의 창시자인 귀도 반 로섬을 두고 하는 얘기로 보인다.[11] 실제로 C 계열의 언어에서 중괄호의 위치에 대한 논쟁은 거의 종교적 논쟁에 가깝다. 현재 한국에서 가장 많이 쓰이는 방식은 C언어의 창시자 Kernighan과 Ritchie의 K&R 스타일이다. 그러나 Eric Allman의 방식을 고수하는 사람들도 제법 많다. 이외에도 중괄호 위치를 정하는 다른 방법들이 있다. 그리고 흔치는 않지만 몇몇 사람들은 그냥 들여쓰기고 뭐고 다 무시하고 쭉 작성해 놓기도 한다.[12] 모아놓고 보면 굉장히 지저분할뿐더러, 당장 입력해야 하는 괄호가 2개나 되고, 괄호 하나라도 잘못 넣으면 블럭이 다 꼬여버리는 귀찮은 존재이지만, 블럭들을 이리저리 만질 때에는 매우 편리한 존재이다. 특히 C 코드를 종이에 출력해보면 중괄호 있고 없고의 가독성 차이가 의외로 크다. 파이썬에서 쓰는 방식에 대해 다른 언어에서 넘어온 사람은 블럭의 시작과 끝 지점을 찾는 부분에서 꽤 불편함을 느끼기도 한다. 대신 괄호를 2개나 일일이 다 넣고, 잘못 넣지 않게 점검도 해 줘야 하는 수고가 없다는 엄청난 장점이 있다.[13] 파이썬의 형제 언어라 불리는 Ruby는 블록의 끝을 end 키워드로 구분하기 때문에 이런 문제에서는 자유로운 편이다.[14] 웃긴 건 파이썬 2는 Tab 키를 권장했다는 것. 탭 키를 사용하지 말 것을 요구하는 건 파이썬 3에서 해당하는 이야기. 물론 파이썬 2에서도 "탭 키를 쓸 경우에는 잊어버리지 말 것"을 이야기하긴 하나, 그렇다면 처음부터 탭 키를 막았어야 말이 된다. 첨에는 탭이 그렇게 똥인 줄 몰랐어.... PyCharm 등의 주요 편집기에는 탭 키를 썼는지 스페이스 바를 썼는지 시각적으로 구분하여 보여주는 기능이 있으므로 참고.[예외] 기존에 짠 방대한 패키지 코드를 수정하기가 매우 까다로우면 하지 않는다. 다른 사람들이 그 패키지를 사용할 때에 사용하던 코드까지 전부 수정해야 하기 때문에, 비단 패키지를 관리하는 사람만의 문제가 아니라 어쩔 수 없다.[16] 대문자로 써도 상관은 없지만 소문자로 쓰는것이 관례이다.[17] 이건 무려 파이썬 소프트웨어 재단이 직접 만들고 관리하는 패키지다! 파이썬 코드의 가독성을 위해 재단에서 얼마나 노력하는지가 느껴진다.[18] 튜플을 변경 불가능하게 막는 이유는 보안 때문이다.[19] global이나 nonlocal 키워드를 사용하지 않았을 경우[20] return 대신 yield를 써서 생성기(generator)를 반환한 경우.[21] MATLAB의 GUI 기반 모델링 툴박스인 Simulink는 기업용으로 구매하면 기본 toolbox가 1 copy에 천만 원 단위, 각종 전기, 전자, 기계, 유압, 항공 등에 관련한 라이브러리는 추가로 유료로 판매한다. 거기에 C로 포팅 해주는 모듈도 역시 개별적으로 추가 구매해야 한다. 만약 오픈소스 소프트웨어로 Simulink를 대체하고자 한다면 현재로서는 FMI 기능 및 C 코드로의 오토코딩 모듈이 있어야 할 것이다. 게다가 패키지 설치를 참 더럽게 이상하게 만들어 놨다. MATLAB과 같은 목적의 파이썬 패키지인 NumPy는 모종의 계약을 통해 문법과 함수 등의 많은 부분에서 MATLAB 함수와 호환되게 수정해 버렸고, 안 그래도 꽤 쓰였던 NumPy는 더욱 사용자가 늘어나고 있다. 파이썬의 경우는 지원 라이브러리의 대부분이 오픈소스이기 때문에 저장소에서 그냥 커맨드 라인(pip install 패키지) 한 줄로 필요한 거의 모든 패키지를 설치해서 쓸 수 있다.[22] 원래 언어 쪽에서 Multilingual과 같은 뜻으로 쓰이나, 컴퓨터, IT 업계에서는 여러 프로그래밍 언어를 능숙하게 구사하여 적재적소에 잘 조합하여 쓸 수 있는 능력을 뜻한다.[23] 문명IV는 python을 이용했고, 문명V과 VI는 lua를 사용한다.[24] 다른 언어의 경우 64비트를 넘어가는 매우 큰 수를 사용하려면 Java의 BigInteger, JavaScript의 BigInt와 같이 별개의 클래스를 사용해야 한다.[25] 큰 수 계산하기 위한 내장 함수들을 파이썬 2부터 저장해 두었기 때문에 가능하다. 유감스럽게도 큰 수 활용 부분은 파이썬 2와 3가 호환이 안 되는 지점 중 하나다. 내장 함수 몇몇이 2와 3에서 기능이 다르다.[26] 파이썬 3.5에서 추가된 typing 모듈에서도 길이가 가변적인 tuple을 나타내기 위해 사용한다.[27] 기본 문법은 타 프로그래밍 언어와의 비교가 실례일 정도로 쉽기에 먼저 타 언어를 접하고 파이썬을 접한 경우 초등수학을 만난 것처럼 머리의 쥐가 풀릴 정도다. 하지만 이것 역시 문법과 같은 입문단계의 이야기지, 중급 단계인 코루틴과 다양한 모듈 활용만 들어가도 머리를 쥐어뜯어가며 설계하고 코딩하는 자신의 모습을 볼 수 있다.[28] 모든 함수가 일단 클래스 안에 있어야 하며, 전역 함수는 static 함수를 사용하는 형태로 짜야 한다. 그나마 객체지향이라는 직관성은 C#이 파이썬보다 더 좋은 편이다. 두 언어는 서로 다른 용도로 사용되는 경우가 많지만 openCV와 같은 곳에서는 둘 다 사용할 수 있기도 하다.[29] 파이썬에서는 이런 단점을 막기위해 다른 언어도 쓸수있도록 만들었다. 예시로 numpy 모듈은 파이썬의 수학 모듈이지만 많은 횟수의 반복이 필요한 부분을 C로 만들었다[30] Beazley의 홈페이지에서 더 많은 시각 자료와 영상을 제공하고 있다.[31] 사실 GIL 방식으로 만들 당시 싱글코어가 일반적이었다는 걸 생각해보면 싱글코어에서의 멀티쓰레딩 목적 자체가 멀티코어 성능 향상보다는 이런 다중 이벤트 루프 구현을 하기 위한 것이라고 봐야 하며, 그런 관점에서는 GIL이 합리적인 선택이었다고 할 수 있다.[32] 단, 코루틴이라는 개념 자체가 이런 최근의 프로그래밍 언어에서 처음으로 등장한 것은 아니다. 코루틴의 개념은 1950년대에 이미 나왔다.[33] Java Runtime Environment. 자바 런타임 환경[34] 이 때문에 많은 사람들이 눈치채지 못하는 부가 효과가 있는데, 바로 이 윈도우 내장 .Net은 동시에 프로그램을 개발 환경으로도 쓰일 수 있다는 점이다. (소스코드 등은 직접 편집해야 하지만) 윈도우 OS에 아무것도 추가로 설치하지 않은 상태에서도 .Net 프로그램 exe를 컴파일할 수 있다.[35] 그래서 프로그래머들이 자신이 개발했던 환경을 '알아서 잘' 포장해서 전달해 줘야 하고, 이것이 파이썬 프로그램 배포의 가장 기본적인 원리다.[36] 실제로 Java 데스크톱 앱의 대표 주자인 마인크래프트 자바 에디션은 초창기와 달리 더 이상 JRE를 따로 깔아주지 않아도 잘 작동한다.[37] 보드가 다른 걸 감안해도 사용 보드인 라즈베리파이 Pico가 훨씬 클럭이 높다는 걸 감안하면 눈에 띄게 느린 게 맞다.[38] PyCharm 프로페셔널은 대학생한테는 무료이다[39] 터미널 기반의 노트북 환경 인터프리터. 기존의 인터프리터와 구분되는 UI를 가지고있다. 주피터 노트북은 ipython이 웹 브라우저 기반으로 작동하는 것[40] 알 수 없는 이유로 실행 버튼을 눌러도 스크립트가 전혀 실행되지 않고 별표만 띄우는 일이 종종 있다. 이게 걸려버리면 기존에 정상적으로 실행된 스크립트를 다시 실행시키면 별표만 나온다. 보통 입문자들이 코드를 이상하게 짜면 저리 되는데, 신기한 건 에러도 안 뿜고 별표만 띄우고 뻗어버린다는 거다. 커널을 리셋하면 해결되긴 하는데 머지않아 또 뻗기도 한다. 밑에 있는 구글 콜라보는 이게 좀 덜한 편.[41] 주피터 노트북의 상위 호환 버전. 인터페이스 부분이 노트북에 비해 개선되어 더 깔끔해졌다. 테마나 터미널 설정도 가능해 눈이 편하다. 이전의 노트북을 더 선호하는 사람도 있는 편.[42] 구글에서 제공하는 주피터 노트북 환경으로. 별도의 설치가 전혀 필요 없다. 심지어 휴대폰에서도 돌아간다! 대형 프로젝트가 아닌 간단한 문제 풀이나 데이터 분석 용도로 사용할 수 있다. 다만 첫 실행의 경우 실행 속도가 다소 느릴 수 있다. 인터넷에 연결된 상태에서 철저하게 웹 위에서 돌아가는지라 본인 컴퓨터에 없는 모듈도 즉석에서 받아 실행시킬 수 있다. 만들어진 노트 파일은 본인의 구글 드라이브에 저장된다.[43] 파이썬의 라이브러리 개발 방식은 세월이 흐름에 따라 여러 차례 바뀌었다. 패키지 관리자라는 개념이 없어서 각자 프로그램의 소스 코드를 다운로드해 쓰던 시절에는 setup.py라는 설치 스크립트를 각자 만들어서 파이썬 프로그램과 함께 배포하는 것이 관행이었다. 복잡한 설치 스크립트가 필요한 이유는 여러 OS 간의 호환성 문제를 해결하기 위함도 있지만, C와 C++ 코드를 함께 사용한 라이브러리를 배포하기 위함이다. 이러한 언어는 해당 OS에 맞게 컴파일해야 하는데, 수많은 OS에 맞춰 컴파일하는 것은 문제가 있었다. 이를 언어 차원에서 지원하기 위해 파이썬 1.6부터는 distutils라는 빌드 도구를 기본 탑재하였다. 그런데 distutils는 자신의 프로그램이 필요로 하는 다른 패키지를 설치하지 못한다는 치명적인 문제가 있었다. 가령 내가 만든 패키지 A가 B에 의존하고, B는 C에 의존할 경우, 예전에는 사용자가 A, B, C를 일일이 설치해야 했다. 이를 해결하기 위해 setuptools라는 도구가 등장하였다. 그리고 시대가 지나고 세월이 흘러 pip이라는 패키지 관리자와 PyPI라는 패키지 저장소가 등장하면서, setup.py를 만드는 기존의 방식의 단점이 부각되었다.[56] 이 때문에 setup.py를 작성하는 대신 pyproject.toml[57]이라는 설정 파일을 사용하는 표준안인 PEP-518이 등장하였다. pip는 버전 10.0부터 pyproject.toml을 지원했다.[44] PyPI가 파이썬을 개발하는 재단에 의해 만들어져 운영되고 있는 공식 저장소이기는 하지만 최초의 파이썬 패키지 저장소는 아니다.[45] 단, 허용할 뿐이지 파이썬이 스스로 자료형을 검사하지는 않는다. Type hint는 다른 도구가 읽고 분석하기 위한 용도이다.[46] Tk interface의 약자이다. Tcl이라는 프로그래밍 언어는 Tk와 함께 GUI에 쓰인다.[47] PySide2를 Qt for Python에서 공식적으로 지원하고 있다.[48] 하드웨어인 서버 컴퓨터가 아니라, 그 위에서 돌아가는 소프트웨어를 말하는 것이다. 웹 서버는 네트워크 요청을 받아 웹 어플리케이션이 처리할 수 있는 형태로 만들어 넘겨주며, 소켓이나 프로세스 풀과 같은 자원을 관리한다.[49] '위스키'라고 읽음[50] 심지어 C++도 사용할 수 있다.[51] 단지 헤더파일을 복붙하는 것으로 작동한다.[52] 프로그램 매매는 동시에 5억 원 이상의 매매를 내는 거래로, 원래는 한국예탁결제원의 승인을 받은 기관 투자자나 외국인 투자자만 사전에 예탁결제원에 프로그램을 등록하고 매매할 수 있다. 그런데 동시에 5억 원 미만의 거래를 하는 개인 투자자들까지 예탁결제원이 간섭하기는 뭐했는지 이쪽은 규제 사각지대다.[53] 일본Ruby가 대세라서, Ruby로 하는 알고리즘 트레이딩이 많다. Ruby로 만든 트레이딩 툴은 Python과 비슷한 퍼포먼스가 난다.[54] 전장에서 일어나는 일을 제외한 나머지 시시콜콜한 일을 다른 코어로 돌리기는 하였으나, 게임의 최소 단위인 전장은 구조상의 한계로 하나의 코어만 동원할 수 있다.[55] 강남 코엑스에서 13~14일 아카마이에서 15일(튜토리얼).

분류