سؤال

لنفترض أنني قد وضعت العامة الغرض المستخدم الأداة مكتوبة في بيثون.سابقا كان لدي فقط نسخة واحدة المتاحة والتي كانت مناسبة الثعبان في وقت لاحق من الإصدار 2.3 أو نحو ذلك.كانت كافية أن تقول "تحميل بايثون إذا كنت بحاجة إلى ، ثم تشغيل هذا البرنامج النصي".كان هناك إصدار واحد فقط من النص في عنصر تحكم مصدر (أنا باستخدام Git) لتتبع.

مع بيثون 3, هذا لم يعد صحيحا بالضرورة.في المستقبل المنظور سوف تتطور في وقت واحد اثنين من إصدارات مختلفة ، واحدة مناسبة بيثون 2.x واحدة مناسبة بيثون 3.x.من منظور التنمية ، أستطيع أن أفكر في عدد قليل من الخيارات:

  1. الحفاظ على اثنين من نصوص مختلفة في نفس الفرع ، إجراء تحسينات على حد سواء في وقت واحد.
  2. الحفاظ على اثنين من فروع منفصلة ، ودمج التغييرات الشائعة ذهابا وإيابا التنمية العائدات.
  3. الحفاظ على إصدار واحد فقط من السيناريو ، بالإضافة إلى تحقق في ملف التصحيح الذي يحول النص من إصدار واحد إلى آخر.عند ما يكفي من تم إجراء تغييرات على أن التصحيح لم يعد ينطبق نظيفة ، حل النزاعات وخلق التصحيح الجديد.

أنا حاليا يميل نحو الخيار 3 ، الأولين ينطوي على الكثير من عرضة للخطأ الملل.ولكن الخيار 3 يبدو فوضوي و مصدري نظام التحكم المفترض أن تكون إدارة بقع بالنسبة لي.

توزيع التعبئة والتغليف ، وهناك المزيد من الخيارات للاختيار من بينها:

  1. نقدم مختلفين تحميل حزم واحدة مناسبة بيثون 2 واحدة مناسبة بيثون 3 (المستخدم إلى تنزيل الصحيح على أي إصدار من الثعبان لديهم).
  2. نقدم واحدة تحميل حزمة مع اثنين من نصوص مختلفة داخل (ثم على المستخدم أن يعرف لتشغيل الصحيح).
  3. واحد تحميل حزمة مع اثنين نسخة محددة من البرامج النصية ، و صغيرة كعب محمل التي يمكن تشغيلها في كل من إصدارات بيثون أن يعمل البرنامج النصي الصحيح عن الثعبان النسخة المثبتة.

مرة أخرى أنا حاليا يميل نحو الخيار 3 هنا ، على الرغم من أنني لم أحاول أن تطوير مثل هذا كعب لودر بعد.

أي أفكار أخرى ؟

هل كانت مفيدة؟

المحلول

تحرير: بلدي الأصلي كان الجواب على أساس الدولة من عام 2009 ، مع بيثون 2.6 و 3.0 كما في الإصدارات الحالية.الآن مع بايثون 2.7 و3. 3, هناك خيارات أخرى.على وجه الخصوص ، هو الآن من الممكن جدا أن استخدام رمز واحد قاعدة بيثون 2 بيثون 3.

انظر ترقية بيثون 2 كود بايثون 3

الجواب الأصلية:

على توصية رسمية يقول:

من أجل ترقية القائمة بايثون 2.5 أو 2.6 التعليمات البرمجية المصدر بيثون 3.0 أفضل الاستراتيجية التالية:

  1. (المتطلب السابق:) تبدأ مع اختبار ممتاز التغطية.

  2. ميناء بيثون 2.6.وهذا ينبغي أن يكون هناك المزيد من العمل من متوسط ميناء من بيثون 2.x بيثون 2.(x+1).تأكد من أن جميع الاختبارات الخاصة بك تمرير.

  3. (لا تزال تستخدم 2.6:) تشغيل -3 تبديل سطر الأوامر.وهذا يتيح تحذيرات من الميزات التي من شأنها أن تكون إزالة (أو تغيير) في 3.0.تشغيل الخاص بك اختبار جناح مرة أخرى و إصلاح التعليمات البرمجية التي يمكنك الحصول على تحذيرات حتى هناك لا تحذيرات اليسار و جميع الاختبارات الخاصة بك لا تزال تمر.

  4. تشغيل 2to3 مصدر إلى مصدر الترجمة على التعليمات البرمجية المصدر الخاصة بك شجرة.(انظر 2to3 الآلي بيثون 2 إلى 3 ترجمة التعليمات البرمجية لمعرفة المزيد عن هذا أداة.) تشغيل نتيجة الترجمة تحت الثعبان 3.0.يدويا إصلاح أي القضايا المتبقية ، وتحديد المشاكل حتى تمر جميع الاختبارات مرة أخرى.

فمن غير المستحسن محاولة الكتابة شفرة المصدر الذي يعمل في ظل دون تغيير كل بيثون 2.6 و 3.0;يجب أن استخدام جدا ملتوية الترميز النمط ، على سبيل المثالوتجنب طباعة البيانات ، metaclasses, وأكثر من ذلك بكثير.إذا كنت الحفاظ على المكتبة التي تحتاج إلى دعم كل من بيثون 2.6 و الثعبان 3.0, أفضل نهج هو تعديل الخطوة 3 أعلاه عن طريق تحرير 2.6 نسخة من كود المصدر و تشغيل على 2to3 المترجم مرة أخرى بدلا من تحرير الإصدار 3.0 من المصدر التعليمات البرمجية.

من الناحية المثالية, كنت في نهاية المطاف مع نسخة واحدة ، وهذا هو 2.6 متوافق و يمكن ترجمتها إلى 3.0 باستخدام 2to3.في الواقع, قد لا تكون قادرة على تحقيق هذا الهدف تماما.لذلك قد تحتاج بعض التعديلات اليدوية للحصول على العمل تحت 3.0.

وأود أن الحفاظ على هذه التعديلات في فرع ، مثل الخيار الخاص بك 2.ومع ذلك, بدلا من الحفاظ على النهائي 3.0 متوافق مع النسخة في هذا الفرع ، وأود أن تنظر إلى تطبيق التعديلات اليدوية قبل على 2to3 الترجمات ، ووضع هذا المعدل 2.6 في الفرع.وميزة هذه الطريقة أن الفرق بين هذا الفرع و 2.6 الجذع أن يكون بدلا صغيرة ، تتكون فقط من التغييرات اليدوية ، ليس التغييرات التي أجراها 2to3.هذه الطريقة ، فروع منفصلة يجب أن يكون من الأسهل للحفاظ على دمج ، و يجب أن تكون قادرة على الاستفادة من التحسينات المستقبلية في 2to3.

بدلا من ذلك, تأخذ قليلا من "ننتظر ونرى" النهج.المضي قدما في ترقية الخاص بك فقط حتى الآن كما يمكنك الذهاب مع واحدة 2.6 النسخة بالإضافة إلى 2to3 الترجمة تأجيل المتبقية التعديل اليدوي حتى كنت حقا بحاجة إلى الإصدار 3.0.ربما قبل هذا الوقت, أنت لا تحتاج إلى أي دليل القرص بعد الآن...

نصائح أخرى

بالنسبة للتطوير، الخيار 3 مرهق للغاية.تعد المحافظة على فرعين هي الطريقة الأسهل على الرغم من أن طريقة القيام بذلك ستختلف بين أنظمة VCS.سيكون العديد من DVCS أكثر سعادة مع عمليات إعادة الشراء المنفصلة (مع أصل مشترك للمساعدة في الدمج) وربما يكون من الأسهل التعامل مع VCS المركزي مع فرعين.الخيار 1 ممكن ولكن قد يفوتك شيء ما لدمجه ومنظمة IMO أكثر عرضة للخطأ.

للتوزيع، سأستخدم الخيار 3 أيضًا إن أمكن.جميع الخيارات الثلاثة صالحة على أي حال، وقد رأيت اختلافات في هذه النماذج من وقت لآخر.

لا أعتقد أنني سأسلك هذا الطريق على الإطلاق.إنه أمر مؤلم مهما كانت الطريقة التي تنظر بها إليها.حقًا، ما لم تكن هناك مصلحة تجارية قوية في الاحتفاظ بكلا الإصدارين في وقت واحد، فإن هذا يمثل صداعًا أكثر من كونه مكسبًا.

أعتقد أنه من المنطقي الاستمرار في تطوير الإصدار 2.x في الوقت الحالي، على الأقل لبضعة أشهر، وحتى عام.في وقت ما، سيكون الوقت قد حان للإعلان عن إصدار نهائي ومستقر لـ 2.x وتطوير الإصدارات التالية لـ 3.x+

على سبيل المثال، لن أقوم بالتبديل إلى الإصدار 3.x حتى تسير بعض أطر العمل الرئيسية على هذا النحو:PyQt، matplotlib، numpy، وبعض الآخرين.ولا أمانع حقًا إذا توقفوا في مرحلة ما عن دعم 2.x وبدأوا في التطوير لـ 3.x، لأنني سأعلم أنه في وقت قصير سأتمكن من التبديل إلى 3.x أيضًا.

سأبدأ بالانتقال إلى الإصدار 2.6، وهو قريب جدًا من إصدار python 3.0.قد ترغب أيضًا في الانتظار حتى الإصدار 2.7، والذي سيكون أقرب إلى إصدار python 3.0.

وبعد ذلك، بمجرد الانتقال إلى الإصدار 2.6 (أو 2.7)، أقترح عليك ببساطة الاحتفاظ بنسخة واحدة فقط من البرنامج النصي، مع أشياء مثل "إذا كان PY3K:...آخر:..." في الأماكن النادرة التي سيكون فيها إلزاميًا.بالطبع، هذا ليس نوع التعليمات البرمجية التي نحب أن نكتبها نحن المطورين، ولكن بعد ذلك لا داعي للقلق بشأن إدارة نصوص برمجية أو فروع أو تصحيحات أو توزيعات متعددة، الأمر الذي سيكون بمثابة كابوس.

مهما كان اختيارك، تأكد من إجراء اختبارات شاملة مع تغطية التعليمات البرمجية بنسبة 100%.

حظ سعيد!

أيًا كان خيار التطوير الذي تم اختياره، يمكن تخفيف معظم المشكلات المحتملة من خلال اختبار الوحدة الشامل للتأكد من أن الإصدارين ينتجان مخرجات مطابقة.ومع ذلك، يبدو الخيار الثاني أكثر طبيعية بالنسبة لي:يعد تطبيق التغييرات من شجرة مصدر إلى شجرة مصدر أخرى مهمة تم تصميم (معظم) أنظمة التحكم في الإصدار من أجلها - لماذا لا تستفيد من الأدوات التي توفرها لتسهيل ذلك.

بالنسبة للتنمية، من الصعب القول دون "معرفة جمهورك".ربما سيقدر مستخدمو Power Python عدم الاضطرار إلى تنزيل نسختين من برنامجك حتى الآن لقاعدة مستخدمين أكثر عمومية، فمن المحتمل أن "يعملوا فقط".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top