메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

파이썬3 우려인가 위협인가? 파이썬 컴퓨팅의 미래를 준비하며

한빛미디어

|

2014-10-20

|

by HANBIT

37,135

제공 : 한빛 네트워크
저자 : Bill Lubanovic
역자 : 김국현
원문 : Python 3: threat or menace?

Python 나는 불길한 비행접시의 사진과 "UFOs: Threat or Menace" 라는 헤드라인을 가진 60년대의 하버드 생활 풍자 잡지의 복사본을 여전히 가지고 싶어합니다.

Python 3 is Killing Python 와 같은 최근 글을 읽을 때 파이썬 2에서 파이썬 3의 느린 전환에 대한 걱정을 생각나게 했습니다. 이러한 글의 저자, 일반적인 파이썬 개발자 그리고 대부분의 파이썬 3와 같이 파이썬을 좋아하는 사람을 들 수 있습니다. 그들의 주요 걱정은 장기화된 파이썬 2-3로 걸쳐있는 상태가 파이썬의 인기를 해칠 것이라는 것입니다.

약 5년전, 나는 파이썬을 소개하기 위한 책을 쓰기 시작했습니다. 이 책은 파이썬 2가 특징적이었으며 또 지배적이었습니다. 불행하게도 책과 함께 비즈니스가 중단되었습니다. 2년 전에 비즈니스가 다시 재개되면서 다시 책을 쓸 수 있었습니다. Introducing Python: Modern Computing in Simple Packages 가 마침내 발행과 함께 선행배포가 되었습니다.

우리가 책을 다시 집필했을 때의 심각한 문제는 파이썬 2 혹은 파이썬 3에 있었습니다. 다른 책에는 약간의 주석 또는 부록을 받을 수도 있습니다. 그러나 우리는 단 하나의 베이스를 통한 코드 예제가 필요했습니다. 그리고 지금은 파이썬 3가 올바른 선택으로 보여집니다. 당신이 편집기와 파이썬 3가 이 책을 위해 최선이었는지 궁금할 수 있습니다. 중요한 정도에 따라 몇 가지 이유를 많거나 적게 제공할 수 있습니다.

첫째, 이 책은 초보 프로그래머 또는 초보 파이썬 프로그래머를 목표로 했습니다. 파이썬을 배운다면 왜 최신 버전을 배우지 않나요?. 파이썬 3는 파이썬 2가 낳은 잘못된 설계를 배울 필요가 없게 설계되었습니다.

새로운 프로그래머가 아닌 경우 파이썬의 어떤 버전이 작업 중인 머신에 사용중이라 선택의 여지가 없을 가능성이 있습니다. 머신이 파이썬 2일 가능성이 높습니다. 파이썬2가 2020년까지 지원될 예정이지만 대부분의 운영체제는 이전에 파이썬 3으로 전환됩니다.

“나는 패키지 X 가 필요하며 3으로 변환되지 않았기 때문에 나는 나의 애플리케이션을 변환하지 않겠다” 와 같이 파이썬 3에 대한 한 논쟁은 닭이 먼저인가 달걀이 먼저인가처럼 다양합니다. 파이썬 3는 올해로 5년이 넘었습니다. 3.3에서 2.7이 했던 일을 할 수 있을 것이며 보다 더 할 것입니다. 그렇게 얼마나 많은 패키지들이 파이썬 2에서 3로 이동하였습니까?

가장 유명한 메인 서드 파티 파이썬 사이트인 PyPI에서 가장 유명한 사이트 두 개의 탐색을 통해 2에서 3으로 변환된 라이브러리들을 볼 수 있습니다. Python 3 Wall of Superpowers(이전에는 수치의 파이썬 3 벽이라고 하며 인식되는 티핑 포인트를 나타내기도 함)의 상위 200개 중에서 165개가 변환되었습니다. 그리고 Python 3 Readiness는 360개에서 270개가 변환된 것을 보여줍니다. Can I Use Python 3?는 파이썬 3를 사용하는 프로젝트에서 막힐 라이브러리를 체크해줍니다.

책을 쓰는 동안 scapy, scrapy, gevent 그리고 몇 가지 다른 프로젝트들을 파이썬 2에서 3으로 변환되지 않은 일부 서드 파티 라이브러리를 포함했습니다. 나는 라이브러리들이 대단히 유용하다고 생각하며 파이썬 3에 머지않아 이식 될 것으로 예상됩니다.

파이썬 3는 급진적인 변화가 아닙니다(유니코드 처리는 제외하며 곧 짧게 설명합니다). 눈에 보이는 변화는 매우 적습니다. 파이썬의 박하향과 사랑스러운 예술적인 공백 구조 및 읽기 쉬운 문법을 여전히 가지고 있습니다. 파이썬은 항상 존재합니다. 희미한 칭찬이 아닙니다. 하나의 좋은 언어입니다. 파이썬 3은 조금 좋습니다. 더 일관적인 명명과 동작을 사용하며 사용되지 않는 부분을 삭제하였으며 또한 많은 버그를 수정하여 개발자들은 모든 프로젝트에 축적된 기술 부채를 조금씩 없앨 수 있습니다.

마지막으로 회유책이었지만 곧 갇히게 될것입니다. 파이썬 2는 막다른 길입니다. 이것은 노르웨지안 블루와 피오르에 대한 그리움입니다. 파이썬3에서 파이썬2로의 매력적인 백 포팅은 계속되지만 새로운 개발은 3라인에 속할 것입니다. 그곳엔 파이썬 2.8이라 불리는 하이브리드 짐승이 없을 것입니다.

호환성있는 코드 작성하기

파이썬 2 사용이 필요하고 미래에 파이썬 3으로 쉽게 이동해야 하는 경우에 시스템이 표준 버전이 되면 브릿지 패키지 중 하나를 사용하시길 바랍니다. 좋은 전략은 표준 __future__모듈을 가져 오는 것입니다. 이것은 파이썬3 처럼 파이썬이 작동하도록 하는 기능이 포함되어 있으며 그리고 무사히 파이썬3로 넘어갈 수 있도록 합니다.
  • print_function -- 괄호 안의 인자, 재지정 및 출력 분리

  • unicode_literals -- 인용된 문자열은 바이트가 아닌 유니코드 시퀀스입니다.

  • division -- / 연산자와 함께 정수를 나누는 것은 실수를 만드며 // 연산자는 정수를 만듭니다.

  • absolute_import -- 여러 모듈이 같은 이름을 가질 때 당신이 모듈을 임포팅 하는것을 보장해줍니다.
Print

가장 눈에 띄는 언어 변화는 print 문법입니다. 파이썬 3에선 함수입니다. 그래서 인자가 괄호안에 있어야 합니다. 파이썬 2에서는 반환과 같이 드러난 구문과 괄호를 사용하지 않아야 합니다. 파이썬의 두 버전에서 발생하는 예가 있으며 간단히 from __future__ import print_function 을 통해 똑같은 코드를 사용할 수 있습니다.

파이썬 2
>>> print "Greetings", "Earthling"
Greetings Earthling
파이썬 3
>>> print "Greetings", "Earthling"
  File "", line 1
    print "Greetings", "Earthling"
                             ^
SyntaxError: invalid syntax
파이썬 3는 예전 print 스타일을 낼 수도 있습니다.

파이썬 2
>>> print ("Greetings", "Earthling")
("Greetings", "Earthling")
파이썬 3
>>> print ("Greetings", "Earthling")
Greetings Earthling
당신은 괄호를 사용하면 간편하다고 생각하겠지만 파이썬 2는 튜플을 출력하는 것입니다.

파이썬 2
>>> from __future__ import print_function
>>> print ("Greetings", "Earthling")
Greetings Earthling
파이썬 3
>>> from __future__ import print_function
>>> print ("Greetings", "Earthling")
Greetings Earthling
마지막으로 두 개의 버전의 해결책입니다.

Unicode

유니코드는 파이썬3의 주된 이유이며 대부분의 사람들이 예상한 첨예한 문제로 밝혀졌습니다.

오랫동안 미국인이 설계한 8비트 문자열인 ASCII 문자 인코딩을 사용하였지만 말투와 발음 부호 및 기호 또는 다른 의심스러운 외국의 것들이 필요가 없었습니다. (프랑스어가 먼저 미국에 도착했다면 우리는 아마 FRESCII와 좀 더 세련된 키보드와 함께 화분이 있었을 것입니다.)

그러나 세계와 이국적인 비 ASCII 문자가 침입하였고 오랜 시간 동안 그들은 Latin-1 및 Windows-1252와 같은 다른 8비트 문자 집합을 정의하여 처리하였습니다. 문자 집합은 ASCII가 사용하지 않는 문자 슬롯에 문자를 넣었습니다. 그러나 당신은 이러한 문자 집합 사이에 이동하는 방법을 지정하는 데 필요한 해결책은 여전히 잘 작동하지 않습니다. 같은 문자는 다른 문자 집합에서는 다른 바이트 값을 가질 수 있습니다. 당신이 여러 웹 사이트, 데이터베이스, 워드 문서를 잘라내기 및 복사를 할 때 볼 수가 있습니다.

유니코드 컨소시엄은 세계의 모든 언어의 문자에 고유한 정수 값 뿐만 아니라 기호의 다양한 유형을 정의하기로 했습니다. 지금은 라틴어 A에도 특별히 정의되어있으며 다른 언어에 있는 일부 문자에서도 정의되어있습니다.

컴퓨터는 바이트만 저장 및 전송합니다. 당신은 하나(또는 이상)의 바이트, 문자 디코드 바이트 시퀀스에 문자를 인코딩할 필요가 있습니다. 당신은 바이트 스트림의 인코딩에 대한 사전 동의가 필요하기 때문에 확실히 말을 할 수 없습니다. 많은 유니코드 인코딩이 존재하지만 가장 인기 있는 것은 몇 가지 좋은 특성을 가진 가변 길이 인코딩인 UTF-8입니다. 유효한 ASCII 바이트 스트림은 문자당 하나의 바이트를 사용하여 유효한 UTF-8로 인코딩된 바이트 스트림입니다. 당신이 말투, 상징, 노자(Lao Tsu)의 오행속요(limericks)가 필요한 경우 다음 UTF-8은 각 문자를 인코딩하는 데 필요한 바이트 수를 나타내기 위해 특정 비트를 사용합니다.

파이썬 2의 문자열은 바이트 시퀀스입니다. 당신은 문자를 추출할 수 있는 올바른 인코딩을 알 수도 알지 못할 수도 있습니다. 파이썬 3은 유니코드 문자 시퀀스로 str을 다시 정의하며 8비트 정수의 시퀀스로 만듭니다. 바이트를 구슬로, 문자열을 매력적인 팔찌로 상상해보십시오.

당신은 인코딩 선택에 따라 str을 바이트로 바이트를 str로 디코딩을 할 수 있습니다. UTF-8은 가장 일반적이고 선호되지만 다른 것도 있습니다. 파이썬3 내부의 문자열 머신은 지저분한 세부 사항을 숨깁니다. 예를 들어 정규표현식 "소문자"를 찾는 것은 단지 a-z까지 ASCII로 정의된 것을 찾는 것이 아닌 소문자로 유니코드 문자가 정의된 것만 임의로 찾습니다. 내부적으로 바이트 길이를 처리하는 방법에 걱정하지 마십시오.

대다수 개발자들이 대부분 시간에 파이썬 3의 바이트 및 문자, 문자열의 분리가 잘 작동합니다. Ned Batchelder의 Pragmatic Unicode는 유니코드 샌드위치를 포함하여 좋은 사용 팁이 있습니다. 프로그램 내에서 유니코드를 사용하고 외부에 바이트를 사용하는 것입니다. 그러나 이러한 분리는 Arimin Ronacher 가 상세히 설명한 대로 네트워크 프로토콜과 같은 낮은 수준의 작업을 다루는 사람들이 적은 작업을 할 수 있습니다. Nick Coghlan는 Python3 and ASCII Compatible Binary Protocols에 기본적으로 응답을 했습니다. 그렇습니다, 우리는 파이썬3에서 몇 가지를 깨면서 목적도 깨버렸습니다 그리고 이유는 Is Python 3 more convenient than Python 2 in every respect? 섹션이 확장되어 Python 3 Q & A 에 설명되어있습니다. 당신이 시스템 수준의 파이썬 개발자라면 이 게시물들이 매우 도움이 될 것입니다.

Division

이것은 꽤 간단한 하나로 할 수 있습니다. 당신의 프로그램에 from __future__ import division 이 포함된 경우 당신이 파이썬3 인터프리터를 사용 여부에 따라 당신은 파이썬3 스타일의 나누기를 얻을 수 있습니다.

Absolute Import

가끔 당신은 "표준" 모듈(sys.path의 디렉터리에 있는 목록 중 하나)을 가져올 수 있으며 당신은 당신의 일부 모듈의 코드를 가져올 수 있습니다. 파이썬2에서 이 모듈의 이름이 같은 경우 당신의 실수로 잘못된 모듈 또는 "그림자" 표준 표준 라이브러리 모듈을 가져올 것입니다. 파이썬3에서는 일반적으로 import 구문은 sys.path를 찾습니다. 패키지를 가지고 있고(같은 패키지 디렉터리) 모듈 b를 원한다면 absolute import 문법(from . import b)을 사용하십시오. 이것으로 당신이 표준 모듈과 동일한 이름을 가진 로컬 모듈을 사용할 수 있습니다. 파이썬 2나 파이썬 3 코드에서 이 동작을 from __future__ import absolute_import 로 사용할 수 있습니다.

추천

문제가 해결된 버전을 사용하시길 바랍니다. 성형 외과 의사가 말하면 이건 피부와 코가 없는 것과 같습니다. 파이썬은 실용적인 언어입니다. 조언을 주자면 이것들 중에 가치 있는 것을 선택하세요
  • 당신에게 선택의 여지가 있다면 파이썬 3를 사용하십시오. 파이썬 공식 코어 배포판을 사용하거나 Anaconda와 같은 많은 과학적인 패키지 같은 것들을 말입니다.

  • 당신이 파이썬 2만이 필요하고 파이썬 3로의 이식이 필요 없다면 파이썬 2를 사용하십시오.

  • 당신이 공통의 코드 베이스를 원하는 경우에 import __future__ 를 사용하거나 아래에 언급된 다른 포터블 패키지 중 하나를 사용하십시오.

  • UFO를 조심하세요.

더 많은 정보

TAG :
댓글 입력
자료실

최근 본 책0