2010-09-23 26 views
9

दोनों के लिए एक मॉड्यूल लिखना मैंने पाइथन 3.0/3.1 के लिए एक शुद्ध-पायथन मॉड्यूल लिखा है जिसे मैं इसे 2.x (शायद केवल 2.6/2.7 के साथ संगत बनाना चाहता हूं)) इसे व्यापक संभव श्रोताओं के लिए उपलब्ध कराने के लिए।पायथन 2.x और 3.x

मॉड्यूल संबंधित फ़ाइल स्वरूपों का एक सेट पढ़ने और लिखने से संबंधित है, इसलिए 2.x और 3.x संस्करणों के बीच अंतर मामूली होगा - उदा। io.BytesIOStringIO.StringIO के बजाय - लेकिन उन सभी को आसानी से मेटाक्लास सेट करने जैसे ब्लॉक को छोड़कर/निकालने के माध्यम से संभाला नहीं जाता है।

इसे संभालने का सही तरीका क्या है? दो लगभग-समान कोडबेस जिन्हें सिंक में रखा जाना चाहिए या फीचर डिटेक्शन के साथ छिड़काव एक कोडबेस? एक एकल, साफ कोडबेस प्लस 2to3 या 3to2?

+0

पायथन का हाउटो [पोर्टिंग पायथन 2 कोड टू पायथन 3] (http://docs.python.org/py3k/howto/pyporting.html) इस विषय पर कुछ अच्छी सलाह देता है। –

उत्तर

11

2.x श्रृंखला में सबसे हाल के संस्करण को लक्षित करने, 2.x के खिलाफ पूरी तरह से अपना कोड लिखें। इस मामले में, यह शायद 2.7 रहने जा रहा है। इसे 2to3 के माध्यम से चलाएं, और यदि यह अपने सभी यूनिट परीक्षणों को पास नहीं करता है, तो उत्पन्न 3.x संस्करण तक 2.x संस्करण को ठीक करें।

आखिरकार, जब आप 2.x समर्थन छोड़ना चाहते हैं, तो आप जेनरेट 3.x संस्करण ले सकते हैं और इसे सीधे संशोधित करना शुरू कर सकते हैं। तब तक, केवल 2.x संस्करण को संशोधित करें।

यह उन लोगों द्वारा अत्यधिक वर्कफ़्लो की सिफारिश की गई है जो 2to3 पर काम करते हैं। दुर्भाग्यवश मुझे उस दस्तावेज़ के लिंक को ऑफहैंड याद नहीं है जिसे मैंने इन सब से लिया है।

+0

और पाइथन 3.0.x से परेशान न करें जिसे तुरंत 3.1 की रिहाई पर हटा दिया गया था। –

+0

- यदि आप उस लिंक को खोदने का प्रबंधन करते हैं, तो मुझे इसे देखना अच्छा लगेगा। –

संबंधित मुद्दे