9 Stimmen

Ein Modul sowohl für Python 2.x als auch für 3.x schreiben

Ich habe ein reines Python-Modul für Python 3.0/3.1 geschrieben, das ich auch gerne mit 2.x (wahrscheinlich nur 2.6/2.7) kompatibel machen würde, um es einem möglichst breiten Publikum zugänglich zu machen.

Das Modul befasst sich mit dem Lesen und Schreiben einer Reihe zusammenhängender Dateiformate, so dass die Unterschiede zwischen den Versionen 2.x und 3.x gering sind - z. B. io.BytesIO anstelle von StringIO.StringIO - aber nicht alle lassen sich leicht über try/except-Blöcke handhaben, wie etwa das Setzen von Metaklassen.

Wie ist das richtig zu handhaben? Zwei nahezu identische Codebases, die synchron gehalten werden müssen, oder eine Codebase, die mit Feature Detection gespickt ist? Eine einzige, saubere Codebase plus 2to3 oder 3to2?

11voto

habnabit Punkte 9240

Schreiben Sie Ihren Code vollständig für 2.x, wobei Sie die neueste Version der 2.x-Reihe verwenden sollten. In diesem Fall wird es wahrscheinlich 2.7 bleiben. Führen Sie ihn durch 2to3 und wenn sie nicht alle Unit-Tests besteht, korrigieren Sie die 2.x-Version, bis die generierte 3.x-Version funktioniert.

Wenn Sie die 2.x-Unterstützung aufgeben wollen, können Sie die generierte 3.x-Version nehmen und direkt ändern. Bis dahin, nur die 2.x-Version ändern.

Dies ist der Arbeitsablauf, der von den Leuten, die an der 2to3 . Leider erinnere ich mich nicht mehr aus dem Stegreif an den Link zu dem Dokument, dem ich all dies entnommen habe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X