사람들이 왜 Python 3을 사용하는 것을 주저합니까?


221

파이썬 3은 2008 년 12 월에 출시되었습니다. 그 이후로 많은 시간이 지났지 만 여전히 오늘날 많은 개발자들이 파이썬 3을 사용하는 것을 망설이고 있습니다. 장고와 같은 인기있는 프레임 워크도 파이썬 3과 호환되지는 않지만 여전히 파이썬 2에 의존합니다.

물론 Python 3에는 Python 2와의 비 호환성이 있으며 일부 사람들은 이전 버전과의 호환성에 의존해야합니다. 그러나 Python 3은 현재 대부분의 프로젝트가 Python 3으로 전환하거나 시작할 수있을 정도로 오래 지속되지 않았습니까?

경쟁 버전이 두 개이면 많은 단점이 있습니다. 학습자에게 혼란을주는 두 가지 지점을 유지해야합니다. 그렇다면 왜 파이썬 3으로 전환하는 것에 대해 파이썬 커뮤니티 전체에 망설임이 많은 것일까 요?


3
Python 2를 사용하기 시작한 정말 많은 새로운 프로젝트가 있습니까? 아니면 장고와 같은 오래된 프로젝트입니까?
Carson63000

3
토론 / 소스를 인용 할 수 있습니까?
Michael Easter

12
@ 마이클 부활절-그는 필요하지 않습니다. SO에서 파이썬 태그를 확인하십시오. 많은 사람들이 "2.x, 3.x는 아직 준비되지 않았습니다"라는 의견을 가지고 있습니다.
Rook

5
Python 3 Wall of Shame을 보지 못했 습니까?
detly September

7
@detly, 지금은 전화 것 초강대국의 파이썬 3 벽
freeforall은 tousez

답변:


249

더 이상이 답변을 업데이트하지 않습니다. 개인 사이트 http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html 에 훨씬 더 긴 Python 3 Q & A가 있습니다 .

이전 답변 :

(상태 업데이트, 2012 년 9 월)

우리 (Python 핵심 개발자)는 Python 3.0이 출시되었을 때 3.x가 2.x 시리즈보다 새로운 프로젝트의 "기본"선택이되기까지 약 5 년이 걸릴 것이라고 예측했습니다. 이 예측은 2.7 릴리스의 계획된 유지 보수 기간이 너무 긴 이유입니다.

원래 Python 3.0 릴리스는 대부분의 실제 용도로는 효과적으로 사용할 수없는 IO 성능 저하와 관련하여 몇 가지 중요한 문제가있는 것으로 나타났습니다. 따라서 2009 년 6 월 말에 Python 3.1 릴리스부터 타임 라인을 시작하는 것이 더 합리적입니다. IO 성능 문제는 3.0.z 유지 보수 릴리스가없는 이유이기도합니다. 3.1로 업그레이드하는 대신 3.0을 사용하려는 이유는 없습니다.

글을 쓰는 시점 (2012 년 9 월)은 현재 전환 과정에 3 년이 조금 넘는 시간이 있었으며 예측은 여전히 ​​진행중인 것으로 보입니다.

파이썬 3 코드를 입력 하는 사람들 print은 함수가되는 것과 같은 구문상의 변화에 ​​의해 가장 규칙적으로 물 렸지만 , 자동화 된 2to3변환 도구가 그것을 아주 행복하게 처리 하기 때문에 실제로 라이브러리 포팅에 어려움이 없습니다 .

실제로 가장 큰 문제는 실제로 의미 론적 문제입니다 .Python 3은 Python 2처럼 텍스트 인코딩으로 빠르고 느슨하게 재생할 수 없습니다. 이것은 파이썬 2에 비해 가장 큰 이점이지만 포팅에 대한 가장 큰 장벽입니다. 유니 코드 처리 문제를 해결 하여 포트가 올바르게 작동하도록해야합니다 (2.x에서와 같이 많은 코드는 자동으로 잘못된 데이터를 생성했습니다) 비 ASCII 입력으로, 특히 비 ASCII 데이터가 일반적이지 않은 환경에서 작동하는 느낌을줍니다.

Python 3.0 및 3.1의 표준 라이브러리조차도 여전히 유니 코드 처리 문제가 발생하여 많은 라이브러리 (특히 웹 서비스 관련 라이브러리)를 이식하기가 어렵습니다.

3.2는 많은 문제를 해결하여 장고와 같은 라이브러리 및 프레임 워크에 대한 더 나은 대상을 제공합니다. 3.2는 또한 wsgiref웹 공간에서 채택하기 위해 필요한 전제 조건 인 3.x 의 첫 번째 작업 버전 (웹 서버와 Python으로 작성된 웹 애플리케이션 간 통신에 사용되는 주요 표준)을 가져 왔습니다 .

NumPy와 및 SciPy와 같은 주요 종속 지금 포팅 된 설치 및 의존성 관리 툴이 좋아 zc.buildout, pipvirtualenv3.x를 사용할 수 있습니다, 피라미드 1.3 릴리스는 파이썬 3.2, 곧 장고 1.5 릴리스는 실험 파이썬 3를 지원합니다 지원하며 12.0 출시 Twisted 네트워킹 프레임 워크는 Python 3 호환 버전을 만들기위한 길을 개척하기 위해 Python 2.5에 대한 지원을 중단했습니다.

Python 3 호환성 라이브러리 및 프레임 워크에 대한 진전 외에도 널리 사용되는 JIT 컴파일 PyPy 인터프리터 구현은 Python 3 지원에 적극적으로 노력하고 있습니다.

마이그레이션 프로세스 관리 도구도 크게 개선되었습니다. 받는 사람뿐만 아니라 2to3(지금 2.X 시리즈에 대한 지원을 유지하기 위해 필요로하지 않는 응용 프로그램의 1 시간 변환에 가장 적합한 것으로 간주됩니다) CPython과의 일부로 제공되는 도구도있다 python-modernize용도, 이는 2to3대상으로 인프라를 이 도구는 Python 2 및 Python 3의 가장 큰 공통 부분 집합입니다.이 도구는 six호환성 라이브러리를 사용하여 Python 2.6 이상 및 Python 3.2 이상에서 실행되는 단일 코드 기반을 작성합니다 . Python 3.3 릴리스는 기존 유니 코드 인식 응용 프로그램을 마이그레이션 할 때 "소음"의 주요 원인 중 하나를 제거합니다. Python 3.3은 문자열 리터럴에 대해 'u'접두사를 다시 한 번 지원합니다 (실제로 그렇지 않음)파이썬 3에서 아무것도는 - 단지 만들기 파이썬 3로 마이그레이션 실수 방지하기 위해 복원 된 것 열심히 이미 제대로 자신의 텍스트와 파이썬 2 진 리터럴)를 구별 한 사용자를 위해.

그래서 우리는 실제로 상황이 어떻게 진행되고 있는지에 매우 만족합니다. 원래의 시간 프레임을 계속 진행하는 데 거의 2 년이 걸리며, 전체 파이썬 생태계를 통해 변화가 잘 풀립니다.

많은 프로젝트가 Python Package Index 메타 데이터를 제대로 선별하지 못하고 유지 보수 담당자가 적은 일부 프로젝트는 Python 3 지원을 추가하기 위해 갈 렸기 때문에 순수 자동화 PyPI 스캐너는 여전히 Python 3 라이브러리 상태에 대해 지나치게 부정적인 견해를줍니다. 지원하다.

PyPI에서 Python 3 지원 수준에 대한 정보를 얻는 데 선호되는 대안은 http://py3ksupport.appspot.com/입니다.

이 목록은 Brett Cannon (오래된 Python 핵심 개발자)에 의해 개인적으로 선별되어 잘못된 프로젝트 메타 데이터, 소스 제어 도구에는 있지만 아직 공식 릴리스에는없는 Python 3 지원 및 최신 포크가있는 프로젝트를 설명합니다. 또는 파이썬 3을 지원하는 대안들 많은 경우에, 파이썬 3에서 아직 사용할 수없는 라이브러리는 주요 의존성이 누락되거나 다른 프로젝트에서 파이썬 3 지원이 부족하여 사용자 요구를 줄입니다 (예 : 핵심 장고 프레임 워크가 Python 3, South 및 django-celery와 같은 관련 도구는 Python 3 지원을 추가 할 가능성이 높으며 피라미드 장고에서 Python 3 지원을 사용하면 Python 3 지원이 gevent와 같은 다른 도구에서 구현 될 가능성이 높아집니다).

http://getpython3.com/ 사이트 에는 Python 3 관련 서적 및 기타 리소스에 대한 훌륭한 링크가 포함되어 있으며 이미 Python 3을 지원하는 주요 라이브러리 및 프레임 워크를 식별하고 개발자가 금융 지원을받는 방법에 대한 정보를 제공합니다. 주요 프로젝트를 Python 3으로 이식하는 PSF

또 다른 좋은 자료는 새 프로젝트의 Python 버전을 선택할 때 고려해야 할 요소에 대한 커뮤니티 위키 페이지입니다. http://wiki.python.org/moin/Python2orPython3


3
지난 18 개월 동안의 진행 상황에 따라 업데이트되었습니다 (3.1의
평균

1
어느 정도까지 (즉, 우리는 2.6에서 io 서브 시스템보다 상당히 느리다는 것을 알았지 만) 일반적인 유용성에 대한 영향은 예상보다 훨씬 나빴습니다 (그 이후로 IO 벤치 마크가 현저히 개선되었으므로 이와 같은 일이 발생할 가능성은 없습니다. 오늘 선적)
ncoghlan

6
제안 된 시간 틀은 2015 년에 열광적이지 않습니다.
zetah

1
내가 보는 방식은 (그리고 이것에 대해 일부 사람들이 화상을 입을 것입니다) 인코딩 앞면에서 Py3가 "실용주의가 순결을 이긴다"는 점에서 파이썬의 선을 위반했습니다 (그리고 여전히 그렇습니다) : Py3은 순수한 인코딩입니다. Py2는 인코딩 실용적이었습니다.
위르겐 A. 에르하르트

2
Py3은 여전히 ​​인코딩에 대해 실용적입니다 (그렇지 않으면 우리는 대리 탈출을하지 않을 것입니다). 우리는 Windows, .NET 및 JVM과 같은 플랫폼에서 운영 체제 인터페이스가 작동하는 방식에 대해 관심이없는 많은 * nix 사용자를 만났습니다 ( 안드로이드 포함). 나는 developerblog.redhat.com/2014/09/09/ 에서 더 많은 글을 썼다 . 주요한 영향은 "조용히 지나쳐서는 안된다"전면에 영향을 미쳤다. 이진 데이터와 텍스트 데이터를 혼합하는 것에 대해 불평합니다.
ncoghlan

48

나는 많은 망설임이 두 가지에서 비롯된다고 생각합니다.

  • 고장 나지 않았다면 고치지 마십시오
  • 필요한 [XYZ 라이브러리] 3.0 포트가 없습니다

이 문서에 요약 된 핵심 언어의 동작 방식에는 약간의 차이가 있습니다 . 예를 들어, "print"를 문장에서 함수로 변경하는 것만 큼 간단한 것은 많은 Python 2.x 코드를 깨뜨릴 것 입니다. 그것은 가장 단순합니다. 그들은 이전 스타일의 클래스를 3.0에서 완전히 제거했습니다. 실제로 언어가 상당히 다르기 때문에 오래된 코드를 포팅하는 것은 일부 사람들이 생각하는 것만 큼 간단하지 않습니다.


2
의존성-포트가 없어도 문제는 재귀 적입니다. 필요한 것은 stdlib to port 외부에 의존성이 거의 없거나 전혀없는 널리 사용되는 라이브러리에 대한 것으로 연쇄 반응을 시작할 수 있습니다.
Tony Meyer

10
주문을 바꾸겠습니다. 우리 중 많은 사람들이 특정 패키지가 3으로 마이그레이션되기를 기다리고 있습니다.
S.Lott

1
@Tony-그것이 Numpy가 현재 사용할 수있는 3.0에 큰 이익이라고 생각하는 이유입니다. @ S.Lott-3이 원하는 것을 제공하는지에 따라 달라집니다. 솔직히 말해서, 나는 최근에야 2.5에서 2.7로 옮겼습니다. 그래서 저는 "최신 및 가장 큰"을 따르는 사람들 중 한 사람이 아닙니다.
TZHX

1
그래도 오래된 코드를 포팅하는 2to3것은 일부 사람들이 두려워하는 것만 큼 어렵지 않습니다 .
ncoghlan

5
파이썬을 배포판 (OSX, Linux 등)에 번들로 제공하는 거의 모든 OS가 여전히 고대 버전의 Python 2에 붙어 있다는 것은 도움이되지 않습니다. 그들의 OS 내부와?
Ant

28

기존 비즈니스가 기존 기능 세트를 변경하지 않으면 서 무언가로 마이그레이션하는 데 시간, 돈 및 노력을 소비해야하는 이유는 없습니다. 파이썬 2 시리즈의 코드 기반은 오랫동안 안정적이고 테스트를 거쳤으며 현재 모든 제품 기능 세트가 있습니다. 왜 파이썬 3을 마이그레이션하기 위해 파이썬 3을 옮기는 데 시간과 돈과 노력을 소비할까요?

사후 마이그레이션 외에도 회귀 오류가 없으며 두통은 피할 수 없습니다.

새 프로젝트의 경우 정책은 명확하고 단순하며 모두 다음과 같은 점에서 시작됩니다.

  1. Ubuntu와 같은 배포판은 기본 설치에서 Python 3을 제공합니까?
  2. 파이썬 3의 라이브러리 생태계는 무엇입니까?
  3. 모든 프레임 워크는 Python 3과 호환 가능합니다.

일반적인 '새 언어 선택'프로세스입니다. 이것은 닭 계란 문제가 발생하는 곳입니다. 많은 사람들이 사용하지 않기 때문에 많은 사람들이 사용하지 않습니다. 궁극적으로 아무도 그것에 감동을 느끼지 않습니다.

이전 버전과의 호환성을 깨는 것은 결코 좋은 일이 아니며, 결국에는 항상 많은 비율의 사용자를 종료합니다.


14

파이썬 2.0이 출시 될 무렵, 파이썬은 빠르게 인기를 얻었습니다. 이전 버전에 의존하지 않았기 때문에 최신 버전을 자연스럽게 사용한 새로운 사용자가 많이있었습니다. 많은 사람들이 기본적으로 2.0을 채택함에 따라 도서관 개발자 등에 게 많은 압력이 가해졌습니다.

Python 3.0이 출시 될 때 이미 Python 2.0에 의존하는 수많은 사용자가 있었고 기하 급수적 인 성장 (기존 사용자에 대해 일정한 요소를 유지함)은 무한정 지속될 수 없었습니다.

개인적으로, 파이썬 2 일 이전의 새로운 기능은 파이썬 3에서 제공하는 기능보다 훨씬 더 강력 해 보였습니다.

나는 파이썬 3가 결국 어쨌든 인수 할 것이라고 생각했지만 지금은 확실하지 않습니다. 그러나이 문제가있는 것은 파이썬만이 아닙니다. 결국, 얼마나 많은 사람들이 Perl 6을 정직하게 사용합니까? 그것은 파이썬 3, IIRC보다 상당히 길었습니다.


3
나는 아직도 Fortran77을 사용하고 있습니다. :) 그리고 파이썬 3의 실제 "기능"대부분은 호환성 문제없이 2.6과 2.7로 백 포트되었습니다. 파이썬 3이 실제로 제공 하는 유일한 것은 "깨끗한"문법입니다.
TZHX

3
Python 3과 Perl 6을 비교하는 것은 잘못되었습니다. Python 3은 Python 2에서 점진적으로 증가한 반면 Perl 6은 완전히 새롭게 디자인되었습니다. Perl 5와 Perl 6은 자매 언어이며 오랫동안 계속 공존 할 것입니다. 반면에 파이썬 3은 공존하는 것이 아니라 파이썬 2를 대체 할 계획입니다. 이것은 큰 차이입니다.
kamaal

1
Perl 6은 아직 개발 중입니다. 예, Rakudo Perl은 Perl 6 사양에 가장 가까운 구현이지만 아직 모든 것을 구현하지는 않습니다. 아직 Perl 6 구현이 준비된 프로덕션은 없습니다.
Htbaa

1
완전성과 준비성의 많은 정의를위한 @Htbaa. Perl 6이 완성되었으며 생산 준비가 완료되었습니다. 문제는 전체 사양과 일치하는 데 시간이 걸릴 수 있으며 다른 언어와도 비슷한 점이 있습니다. 예를 들어 GCC는 최근까지도 전체 C ++ 사양과 실제로 일치하지 않았습니다. 언어 설계 및 구현은 매우 느린 프로세스입니다.
kamaal

1
rakudo.org/node/75 라쿠도 스타는 오래 전부터 출시되었습니다. 당신은 그것을 시도해야합니다.
kamaal

11

자동 번역으로 해결할 수 없다고 생각하는 큰 쇼 스토퍼는 정수 나누기입니다. x를 반올림 (x가 정수 일 때)을주는 x / 2에 의존하는 과학 코드가 있습니다.

파이썬 3은 그렇게하지 않지만 (홀수 x의 경우) 0.5 답변을 줄 것입니다.
때로는 부동 소수점 나누기를 수행하므로 부동 동작을 원하기 때문에 코드의 모든 /를 //로 바꿀 수는 없습니다.

따라서 파이썬 3으로 포팅하려면 수만 줄의 코드를 탐색하고 모든 /를 검사하고 / 또는 //인지 여부를 확인할 수 있는지 확인해야합니다.


7
"-Q"옵션 (2.7-2.2)이 부문에 대한 경고를 발생시킬 수 있습니다. 또한 fixdiv.py 는 이러한 경고를 사용하여 스크립트의 표현식을 업데이트합니다.
Eryk Sun

10

Python 3은 필요한 모든 라이브러리가 이미 Py3k로 이식 된 경우 새 프로젝트를 시작하는 것이 좋습니다 .

이 파이썬 2.7은 두 세계의 최고 사용 옵션이 아닌 경우 : 당신이를 가장 파이썬 2.x를 위해 만든 모든 라이브러리 당신이 결정할 때 마이그레이션이 용이 있도록 점차 Py3k 호환되도록 코드를 변경할 수 있습니다 그것. 2.7에 이미있는 Py3k의 구문 장점 목록은 다소 길기 때문에에서 가져 오는 것을 잊지 마십시오 __future__. 내가 좋아하는 것은 기본적으로 유니 코드이며 나누기는 항상 부동 소수점을 생성합니다.


10

웹 서비스 관점에서 : 주요 서버 프레임 워크 나 웹 프레임 워크 중 어느 것도 Python3을 지원하지 않습니다.

업데이트 : 분명히 2011 년 초 현재 (2013 년 말) 대부분의 주요 프레임 워크가 Python3과 함께 작동하고 있습니다. 그러나 일부는 여전히 호환되지 않습니다. 여전히 진행중인 중요한 사례는 Twisted 입니다.


BTW, Django는 1.5 버전에서 Python3을 실험적으로 지원하기 시작했습니다.
9000

1
Django 1.6은 이제 공식적으로 Python 3을 지원합니다. Flask도 지원합니다.
chhantyal

8

무거운 i18n 작업을 수행하지 않는 한 P3K를 사용하는 강력한 이유는 없습니다. 필자는 유능한 유니 코드가 내 (ASCII) 작업에 대한 장벽이었고 강제 생성기가 코드를 방해하는 것으로 나타났습니다.

몇 년 안에 3은 더 매력적인 환경을 제공하지만 오늘날은 아닙니다.


4

배포판으로 Python3을 사용할 수 없습니다. 이미 Python2에서 전환 된 프린지 배포판이 있습니다. 그러나 데비안, 우분투 등과 같은 주류 Linux 변형은 그렇지 않습니다. 그것이 응용 프로그램 작성자로서 나에게하지 않는 주된 이유입니다.

전환을 준비했지만 비 호환 구문 구문을 피하려고 시도 했지만 제대로 테스트 할 수 없습니다. 닭고기와 계란 문제로 귀결됩니다.


4
이것은 한 번만 사실 일 수도 있지만 "apt-get install python3"및 "yum install python3"은 오랫동안 작동했습니다. Tox와 같은 도구 및 Shining Panda CI와 같은 서비스를 사용하면 여러 Python 버전에서 테스트하기가 쉽지 않습니다.
ncoghlan

이제 많은 배포판은 다른 많은 프로그래밍 언어와 달리 기본적으로 python3을 설치합니다.
Antti Haapala
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.