it-swarm-eu.dev

Warum zögern die Leute, Python 3) zu verwenden?

Python 3 wurde im Dezember 2008 veröffentlicht. Seitdem ist viel Zeit vergangen, aber bis heute zögern viele Entwickler, Python 3. Auch beliebte Frameworks wie Django) zu verwenden sind noch nicht kompatibel mit Python 3, verlassen sich aber immer noch auf Python 2).

Sicher, Python 3 hat einige Inkompatibilitäten mit Python 2 und einige Leute müssen sich auf Abwärtskompatibilität verlassen. Aber nicht Python 3 gibt es jetzt schon lange genug, damit die meisten Projekte wechseln oder mit Python 3?

Zwei konkurrierende Versionen zu haben hat so viele Nachteile; Es müssen zwei Zweige beibehalten werden, Verwirrung für die Lernenden und so weiter. Warum gibt es in der gesamten Python Community) so viele Bedenken, auf Python 3) umzusteigen?

225
Ham Vocke

Beachten Sie, dass ich diese Antwort nicht mehr aktualisiere. Ich habe viel mehr Python 3 Fragen und Antworten auf meiner persönlichen Website unter http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html

Vorherige Antwort:

(Statusaktualisierung, September 2012)

Wir (dh die Python Kernentwickler) haben bei der Veröffentlichung von Python 3.0 vorausgesagt, dass es ungefähr 5 Jahre dauern würde, bis 3.x die "Standard" -Wahl für neue Projekte im Laufe der 2 ist .x Serie. Diese Vorhersage ist der Grund, warum der geplante Wartungszeitraum für die Version 2.7 so lang ist.

Die ursprüngliche Version Python 3.0 wies auch einige kritische Probleme mit schlechter IO Leistung auf, die sie für die meisten praktischen Zwecke praktisch unbrauchbar machten. Daher ist es sinnvoller, die Zeitleiste von der Version aus zu starten Veröffentlichung von Python 3.1 Ende Juni 2009. (Diese IO Leistungsprobleme sind auch der Grund, warum es keine 3.0.z-Wartungsversionen gibt: Es gibt keinen guten Grund, warum jemand bleiben möchte mit 3.0 über Upgrade auf 3.1).

Zum Zeitpunkt des Schreibens (September 2012) bedeutet dies, dass wir uns derzeit etwas mehr als drei Jahre im Übergangsprozess befinden und dass die Vorhersage immer noch auf dem richtigen Weg zu sein scheint.

Während People Typing Python 3-Code am häufigsten von syntaktischen Änderungen wie print als Funktion gebissen wird, ist dies für die Portierung von Bibliotheken eigentlich kein Problem Das automatisierte 2to3 Konvertierungstool erledigt dies recht problemlos.

Das größte Problem in der Praxis ist tatsächlich ein semantisches: Python 3 lässt Sie nicht so schnell und locker mit Textcodierungen spielen wie Python 2. Dies ist sowohl der größte Vorteil gegenüber Python 2 als auch das größte Hindernis für die Portierung: Sie müssen beheben Ihre Unicode-Handhabungsprobleme beheben, damit ein Port ordnungsgemäß funktioniert (während In 2.x erzeugte ein Großteil dieses Codes stillschweigend falsche Daten mit Nicht-ASCII-Eingaben, was den Eindruck erweckte, dass es funktioniert, insbesondere in Umgebungen, in denen Nicht-ASCII-Daten ungewöhnlich sind.

Sogar die Standardbibliothek in Python 3.0 und 3.1 hatte immer noch Probleme mit der Unicode-Behandlung, was es schwierig machte, viele Bibliotheken zu portieren (insbesondere solche, die sich auf Webdienste beziehen).

3.2 hat viele dieser Probleme angegangen und bietet ein viel besseres Ziel für Bibliotheken und Frameworks wie Django. 3.2 brachte auch die erste funktionierende Version von wsgiref (dem Hauptstandard für die Kommunikation zwischen Webservern und in Python geschriebenen Webanwendungen) für 3.x, die eine notwendige Voraussetzung für die Übernahme in den Webspace war.

Wichtige Abhängigkeiten wie NumPy und SciPy wurden jetzt portiert. Installations- und Abhängigkeitsmanagement-Tools wie zc.buildout, pip und virtualenv sind für 3.x verfügbar. Die Pyramid 1.3-Version unterstützt Python 3.2, die kommende Version Django 1.5 enthält experimentelle Python 3-Unterstützung, und die Version 12.0 des Twisted Networking Frameworks hat die Unterstützung von Python eingestellt. 2.5, um den Weg für die Erstellung einer Python 3-kompatiblen Version zu ebnen.

Zusätzlich zu den Fortschritten bei Python 3-Kompatibilitätsbibliotheken und -Frameworks arbeitet die beliebte JIT-kompilierte PyPy-Interpreter-Implementierung aktiv an der Python 3-Unterstützung.

Die Tools zur Verwaltung des Migrationsprozesses haben sich ebenfalls deutlich verbessert. Zusätzlich zum Tool 2to3 , das als Teil von CPython bereitgestellt wird (das jetzt als am besten geeignet für einmalige Konvertierungen von Anwendungen angesehen wird, für die keine Unterstützung erforderlich ist Für die 2.x-Serie gibt es auch python-modernize , das die 2to3 - Infrastruktur verwendet, um auf die (große) gemeinsame Teilmenge von Python 2 und Python 3. Dieses Tool erstellt eine einzelne Codebasis, die sowohl auf Python 2.6+ als auch auf Python 3.2+ mit dem ausgeführt wird Hilfe der six Kompatibilitätsbibliothek. Die Version Python 3.3 beseitigt auch eine Hauptursache für "Rauschen" bei der Migration vorhandener Unicode-fähiger Anwendungen: Python 3.3 unterstützt erneut das Präfix 'u' für Zeichenfolgenliterale (dies ist nicht der Fall) eigentlich do alles in Python 3 - es wurde nur wiederhergestellt, um zu vermeiden, dass versehentlich die Migration zu Python 3 schwieriger wird für Benutzer, die ihre Text- und Binärliterale in Python 2) bereits korrekt unterschieden haben 2).

Wir sind also ziemlich zufrieden mit dem Fortschritt der Dinge - es sind noch fast zwei Jahre bis zu unserem ursprünglichen Zeitrahmen, und die Änderungen wirken sich gut auf das gesamte Python Ökosystem aus.

Da viele Projekte ihre Python Paketindex-Metadaten nicht richtig kuratieren und einige Projekte mit weniger aktiven Betreuern gegabelt wurden, um Python 3-Unterstützung hinzuzufügen, bieten rein automatisierte PyPI-Scanner immer noch Unterstützung eine übermäßig negative Ansicht des Status der Python 3-Bibliotheksunterstützung.

Eine bevorzugte Alternative zum Abrufen von Informationen zum Grad der Python 3-Unterstützung für PyPI ist http://py3ksupport.appspot.com/

Diese Liste wird von Brett Cannon (einem langjährigen Python Kernentwickler) persönlich kuratiert, um falsche Projektmetadaten zu berücksichtigen. Python 3-Unterstützung, die in Tools zur Quellcodeverwaltung enthalten ist, jedoch noch nicht in einem offizielle Version und Projekte mit aktuelleren Gabeln oder Alternativen, die Python 3 unterstützen. In vielen Fällen fehlen den Bibliotheken, die auf Python 3 noch nicht verfügbar sind, Schlüsselabhängigkeiten und/oder das Fehlen von Python 3-Unterstützung in anderen Projekten verringert die Benutzeranforderung (z. B. sobald das Kern-Framework Django auf Python 3 verfügbar ist, verwandte Tools wie South und Django-Sellerie fügt eher Python 3-Unterstützung hinzu, und die Verfügbarkeit von Python 3-Unterstützung in beiden Pyramid und Django macht es wahrscheinlicher, dass Python 3-Unterstützung in anderen Tools wie gevent implementiert wird.

Die Site unter http://getpython3.com/ enthält einige hervorragende Links zu Büchern und anderen Ressourcen für Python 3 und identifiziert einige wichtige Bibliotheken und Frameworks, die bereits vorhanden sind unterstützt Python 3 und bietet auch einige Informationen darüber, wie Entwickler finanzielle Unterstützung von der PSF erhalten können, wenn sie Schlüsselprojekte auf Python 3 portieren.

Eine weitere gute Ressource ist die Community-Wiki-Seite mit Faktoren, die bei der Auswahl einer Python - Version für ein neues Projekt zu berücksichtigen sind: http://wiki.python.org/moin/Python2orPython3

250
ncoghlan

Ich glaube, dass ein Großteil des Zögerns auf zwei Dinge zurückzuführen ist:

  • Wenn es nicht kaputt ist, reparieren Sie es nicht
  • [XYZ-Bibliothek], die wir benötigen, hat keinen 3.0-Port

Es gibt einige Unterschiede im Verhalten der Kernsprache, beschrieben in dieses Dokument . Etwas so Einfaches wie das Ändern von "print" von einer Anweisung in eine Funktion bricht beispielsweise eine Menge von Python) = 2.x Code - und das ist nur der einfachste. Sie haben die älteren Klassen in 3.0 vollständig entfernt. Sie sind in der Tat ganz andere Sprachen - daher ist das Portieren von altem Code nicht so einfach, wie manche annehmen.

48
TZHX

Es gibt keine zwingenden Gründe für bestehende Unternehmen, Zeit, Geld und Mühe auf die Migration zu etwas zu verwenden, ohne Änderungen am vorhandenen Funktionsumfang vorzunehmen. Ich möchte damit sagen, dass die Codebasis auf Python 2-Serie ist seit langer Zeit in Betrieb, stabil, getestet und verfügt über alle aktuellen Produktfunktionen. Warum sollte jemand Zeit und Geld ausgeben? und Mühe nur zu bewegen Python 3 nur um zu migrieren.

Neben der Nachmigration wird sichergestellt, dass keine Regressionsfehler auftreten und dass all diese Kopfschmerzen unvermeidbar sind.

Bei neuen Projekten ist die Richtlinie schlicht und einfach. Alles beginnt mit den folgenden Punkten:

  1. Versendet eine Distribution wie Ubuntu Python 3 in ihrer Standardinstallation?
  2. Was ist das Bibliotheksökosystem für Python 3?.
  3. Sind alle Frameworks ua kompatibel mit Python 3. etc etc.).

Es ist Ihr üblicher Prozess, eine neue Sprache zu wählen. Hier kommt das Hühnerei-Problem ins Spiel. Nicht viele Leute benutzen es, weil nicht viele Leute es benutzen. Letztendlich hat niemand Lust, sich überhaupt darauf einzulassen.

Die Abwärtskompatibilität zu brechen war noch nie eine gute Sache. Am Ende beenden Sie immer einen guten Prozentsatz der Benutzer.

28
kamaal

Ungefähr zu der Zeit Python 2.0 wurde veröffentlicht, Python wurde immer beliebter. Es gab viele neue Benutzer, die natürlich die neueste Version verwendeten, da sie keine hatten Abhängigkeiten von den älteren Versionen. Da viele Leute standardmäßig 2.0 verwenden, gab es einen großen Druck auf Bibliotheksentwickler usw.

Zum Zeitpunkt der Veröffentlichung von Python 3.0) gab es bereits eine große Anzahl von Benutzern, die von Python 2.0 und exponentiellem Wachstum abhängig waren) (wobei ein konstanter Faktor im Verhältnis zum vorhandenen beibehalten wurde) Benutzer) kann offensichtlich nicht auf unbestimmte Zeit aufrechterhalten werden.

Persönlich schienen die neuen Funktionen in den 2 Tagen von Python 2) viel überzeugender zu sein als die von Python 3) bereitgestellten.

Früher dachte ich, Python 3 würde irgendwann sowieso übernehmen, aber ich bin mir jetzt nicht so sicher. Aber es ist nicht nur Python, das dieses Problem hat. Nachher) Alles in allem, wie viele Leute verwenden Perl 6 ehrlich? Das ist schon ein bisschen länger als Python 3, IIRC).

14
Steve314

Ein großer Show-Stopper für mich, von dem ich glaube, dass er nicht durch automatische Übersetzung behoben werden kann, ist die Ganzzahldivision. Ich habe wissenschaftliche Codes, die darauf beruhen, dass x/2 x abgerundet gibt (wenn x eine ganze Zahl ist).

Python 3 würde das nicht tun, würde aber eine .5-Antwort geben (für ungerades x).
Ich kann nicht einfach alle/in meinem Code durch // ersetzen, da ich manchmal eine Float-Division durchführe und daher das Float-Verhalten möchte.

Damit ich auf python 3) portieren kann, muss ich Zehntausende von Codezeilen durchsuchen, jedes/überprüfen und prüfen, ob ich herausfinden kann, ob es/sein sollte oder //.

11
Sharky

Aus Sicht der Webdienste: Keines der wichtigsten Server-Frameworks oder Web-Frameworks unterstützt Python3.

Update: Offensichtlich war dies Anfang 2011 der Fall, ab sofort (Ende 2013) arbeiten die meisten wichtigen Frameworks mit Python3. Einige sind jedoch immer noch nicht kompatibel. Ein wichtiges Beispiel wäre Twisted, wo es ist noch in Arbeit .

10
vartec

Python 3 ist schön, um ein neues Projekt zu starten if Alle benötigten Bibliotheken sind bereits auf Py3k portiert.

Wenn dies keine Option ist, ist die Verwendung von Python 2.7 das Beste aus beiden Welten: Sie haben fast jede Bibliothek für Python 2.x ) erstellt) und Sie können Ihren Code schrittweise so ändern, dass er Py3k-kompatibel ist, sodass die Migration einfach ist, wenn Sie sich dafür entscheiden. Die Liste der Syntax-Goodies von Py3k, die Sie bereits in 2.7 haben, ist ziemlich lang. Vergessen Sie nicht, sie zu importieren von __future__. Meine Favoriten sind standardmäßig Unicode und Division erzeugt immer einen Float.

10
9000

Es gibt keine zwingenden Gründe, warum ich P3K verwendet habe, es sei denn, Sie erledigen schwere i18n-Arbeiten. Bei meinen Streifzügen habe ich festgestellt, dass der allgegenwärtige Unicode ein Hindernis für meine Arbeit (ASCII) darstellt und dass die Generatoren meinen Code verstopfen müssen.

In ein paar Jahren wird 3 ein überzeugenderes Umfeld bieten, aber nicht heute.

8
Paul Nathan

Distributionen stellen Python3 nicht zur Verfügung. Es gibt einige Randdistributionen, die bereits von Python2 übergehen. Mainstream-Linux-Varianten wie Debian, Ubuntu usw. tun dies jedoch nicht. Das ist der Hauptgrund für mich als Bewerbungsautor, dies auch nicht zu tun.

Obwohl ich den Übergang vorbereitet und sogar versucht habe, die Syntaxkonstrukte zu vermeiden, die inkompatibilisiert waren, kann ich ihn nicht richtig testen. Es läuft wirklich auf das Henne-Ei-Problem hinaus.

4
mario