Pamiętaj, że nie aktualizuję już tej odpowiedzi. Mam dużo dłuższe pytania i odpowiedzi dotyczące Pythona 3 na mojej osobistej stronie http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html
Poprzednia odpowiedź:
(Aktualizacja statusu, wrzesień 2012 r.)
My (tj. Programiści Python) przewidzieliśmy, kiedy wydana została wersja Python 3.0, minie około 5 lat, zanim 3.x stanie się „domyślnym” wyborem dla nowych projektów z serii 2.x. Ta prognoza jest powodem, dla którego planowany okres konserwacji dla wydania 2.7 jest tak długi.
Oryginalna wersja Python 3.0 również okazała się mieć pewne krytyczne problemy ze słabą wydajnością IO, które sprawiły, że była ona praktycznie bezużyteczna dla większości praktycznych celów, więc sensowniejsze jest rozpoczęcie osi czasu od wydania Python 3.1 pod koniec czerwca 2009 roku. Problemy z wydajnością we / wy są również powodem, dla którego nie ma wydań konserwacyjnych 3.0.z: nie ma dobrego powodu, dla którego ktoś chciałby trzymać się wersji 3.0 zamiast aktualizacji do wersji 3.1).
W momencie pisania tego tekstu (wrzesień 2012 r.) Oznacza to, że obecnie trwamy nieco ponad 3 lata w procesie przejścia, a ta prognoza wciąż wydaje się być zgodna z planem.
Podczas gdy ludzie piszący kod Python 3 są najczęściej gryzie przez zmiany składniowe, takie jak stanie print
się funkcją, tak naprawdę nie jest to kłopotliwe z przenoszeniem bibliotek, ponieważ 2to3
narzędzie do automatycznej konwersji radzi sobie z tym całkiem szczęśliwie.
Największym problemem w praktyce jest problem semantyczny: Python 3 nie pozwala na szybką i swobodną grę z kodowaniem tekstu, tak jak to robi Python 2. Jest to zarówno jego największa zaleta w stosunku do Pythona 2, ale także największa bariera przy przenoszeniu: musisz naprawić problemy z obsługą Unicode, aby port działał poprawnie (podczas gdy w wersji 2.x większość tego kodu cicho produkowała nieprawidłowe dane z dane wejściowe inne niż ASCII, co sprawia wrażenie pracy, szczególnie w środowiskach, w których dane spoza ASCII są rzadkie).
Nawet standardowa biblioteka w Pythonie 3.0 i 3.1 nadal ma problemy z obsługą Unicode, co utrudnia portowanie wielu bibliotek (szczególnie tych związanych z usługami internetowymi).
3.2 rozwiązało wiele z tych problemów, zapewniając znacznie lepszy cel dla bibliotek i frameworków takich jak Django. 3.2 przyniósł także pierwszą działającą wersję wsgiref
(główny standard używany do komunikacji między serwerami WWW i aplikacjami WWW napisanymi w Pythonie) dla 3.x, która była niezbędnym warunkiem przyjęcia w przestrzeni internetowej.
Kluczowe zależności jak NumPy i scipy zostały przeniesione, narzędzia do instalacji i zarządzania zależność podoba zc.buildout
, pip
i virtualenv
są dostępne dla 3.x, uwolnienie Pyramid 1.3 obsługuje Python 3.2, nadchodząca Django 1.5 wydanie zawiera eksperymentalne wsparcie Python 3 i 12,0 uwolnienie szkielet sieci Twisted zrezygnował z obsługi Python 2.5, aby utorować drogę do utworzenia wersji zgodnej z Python 3.
Oprócz postępów w zakresie bibliotek i frameworków kompatybilności z Python 3, popularna implementacja interpretera PyPy skompilowana w JIT aktywnie działa na obsłudze Python 3.
Znacząco poprawiły się także narzędzia do zarządzania procesem migracji. Oprócz 2to3
narzędzia dostarczanego jako część CPython (który jest teraz uważany za najlepiej przystosowany do jednorazowych konwersji aplikacji, które nie muszą utrzymywać wsparcia dla serii 2.x), istnieje również python-modernize
, który wykorzystuje 2to3
infrastrukturę do kierowania (duży) wspólny podzbiór Python 2 i Python 3. To narzędzie tworzy pojedynczą bazę kodu, która będzie działała zarówno w Python 2.6+, jak i Python 3.2+ za pomocą six
biblioteki kompatybilności. Wydanie Python 3.3 eliminuje również jedną główną przyczynę „szumu” podczas migracji istniejących aplikacji obsługujących Unicode: Python 3.3 ponownie obsługuje przedrostek „u” dla literałów łańcuchowych (w rzeczywistości nie robi tegocokolwiek w Pythonie 3 - zostało właśnie przywrócone, aby uniknąć przypadkowego utrudnienia migracji do Pythona 3 dla użytkowników, którzy już poprawnie rozróżnili swój tekst i literały binarne w Pythonie 2).
Tak więc jesteśmy naprawdę zadowoleni z tego, jak postępują sprawy - wciąż upłynęły prawie 2 lata od naszego pierwotnego harmonogramu, a zmiany ładnie przebiegają w całym ekosystemie Python.
Ponieważ wiele projektów nie optymalizuje metadanych indeksu pakietów Python, a niektóre projekty z mniej aktywnymi opiekunami zostały rozwidlone w celu dodania obsługi języka Python 3, czysto zautomatyzowane skanery PyPI wciąż dają zbyt negatywny obraz stanu biblioteki Python 3 wsparcie.
Preferowaną alternatywą dla uzyskiwania informacji o poziomie obsługi Python 3 na PyPI jest http://py3ksupport.appspot.com/
Ta lista jest osobiście wyleczona przez Bretta Cannona (wieloletniego programistę w języku Python) w celu uwzględnienia niepoprawnych metadanych projektu, obsługi języka Python 3, który jest w narzędziach kontroli źródła, ale nie jest jeszcze w oficjalnej wersji, oraz projektów, które mają bardziej aktualne widelce lub alternatywy, które obsługują Python 3. W wielu przypadkach w bibliotekach, które nie są jeszcze dostępne w Python 3, brakuje kluczowych zależności i / lub brak obsługi Python 3 w innych projektach zmniejsza zapotrzebowanie użytkowników (np. gdy podstawowa platforma Django jest dostępna na Python 3, powiązane narzędzia, takie jak South i django-selery, częściej dodają obsługę Python 3, a dostępność obsługi Python 3 zarówno w Pyramid, jak i Django zwiększa prawdopodobieństwo, że obsługa Python 3 zostanie zaimplementowana w innych narzędziach, takich jak gevent).
Witryna pod adresem http://getpython3.com/ zawiera doskonałe linki do książek i innych zasobów dla Python 3, identyfikuje niektóre kluczowe biblioteki i frameworki, które już obsługują Python 3, a także zawiera informacje na temat tego, w jaki sposób programiści mogą uzyskać pomoc finansową od PSF w przenoszeniu kluczowych projektów do Python 3.
Innym dobrym zasobem jest strona wiki społeczności na temat czynników, które należy wziąć pod uwagę przy wyborze wersji Python dla nowego projektu: http://wiki.python.org/moin/Python2orPython3