2016-12-20 3 views
1

Ich möchte auf Python 3.5 aktualisieren, aber ich verwende Legacy Python 2.7-Pakete. Ist es einfach, Legacy-Pakete in Python 3.5 auszuführen? Ich habe den Eindruck, dass dies nicht einfach ist, aber ich habe ein paar Recherchen durchgeführt, um zu sehen, ob ich falsch liege und mir nicht viel einfallen ließ.Können wir Legacy Python 2.7-Code unter Python 3.5 ausführen?

Ich würde erwarten, dass es ein Multiprocessing-Paket gibt, das standardisierte Handoffs zwischen 3.5 Code und 2.7 Paketen erlaubt, so dass sie unabhängig in ihren eigenen Umgebungen laufen können, aber für den Entwickler etwas nahtlos sind.

Ich spreche nicht über die Konvertierung meines eigenen Codes zu 3.5, ich spreche über Bibliotheken, die ich verwende, die nicht für oder von mir aktualisiert werden.

+1

Viele Legacy-Pakete können mit dem '2to3'-Tool, das mit python3.x ausgeliefert wird, aktualisiert werden. Das Werkzeug ist jedoch nicht zu 100% perfekt. Der beste Weg zu wissen, ob ein Paket funktioniert oder nicht, besteht darin, es auszuprobieren und zu sehen, was passiert (oder schauen Sie in der Dokumentation nach, ob es python3.x auf die eine oder andere Weise unterstützt). – mgilson

+4

Nein, sie müssen konvertiert und ausgiebig getestet werden. Es gibt Syntaxänderungen, aber auch subtilere Probleme wie Divisionsergebnisse. Dann gibt es in C geschriebene Module, die API-Änderungen zur Kenntnis nehmen müssen und mit der Python 3-Laufzeit verknüpft werden müssen. – cdarke

Antwort

1

Wenn Sie die von 2.7 unterstützte neuere Syntax verwenden, z. Um Ausnahmen und/oder, noch besser, mit neuen Funktionen, die aus __future__ importiert wurden, zu arbeiten, wird es viel einfacher sein, Ihren Code in Python 3 zu konvertieren (bis zu überhaupt keine Änderungen). Ich würde vorschlagen, diesen Weg zuerst zu folgen, denn es kann schrittweise, ohne einen abrupten Sprung zu Python 3

Ich nehme an, Python-Prozesse mit verschiedenen Versionen können zusammenarbeiten, weil Objekt Picking-Format kompatibel ist, und Sie können explizit Verwenden Sie für beide Seiten eine spezielle Beizprotokollversion. Ich denke nicht, multiprocessing Pakete auf beiden Seiten wäre aber zu nützlich. Erwägen, z.B. ZeroMQ als eine allgemeinere Lösung.

1

Leider gibt es keine "nette" oder automatische Möglichkeit, die Verarbeitung von 2.7 Code unter 3.5 zu verarbeiten (das funktioniert einwandfrei).

Sie haben erwähnt, dass Sie sich Gedanken über Bibliotheken machen, nicht über Ihren eigenen Code - zunächst würden Sie hoffen, dass sie aktualisiert werden, wenn sie aktiv entwickelt werden. Wenn nicht, wie Sie sagten, besteht die Möglichkeit, dass sie als zukunftssicher geschrieben wurden. Ich habe einige gute gefunden (z. B. Google-API-Python-Client, z. B. https://github.com/google/google-api-python-client/blob/master/setup.py).

In diesem Fall besteht die einzige Möglichkeit zum Aktualisieren darin, alle Syntaxänderungen selbst zu beheben. Die häufigsten Fälle, mit denen ich mich beschäftige, sind das "Drucken" und die Ausnahmebehandlung.