كيف يمكنني تحديث Perl على نظام Windows دون فقدان الوحدات؟

StackOverflow https://stackoverflow.com/questions/117481

سؤال

في العمل أستخدم Perl 5.8.0 على نظام Windows.

عندما قمت بتشغيل Perl لأول مرة، ذهبت إلى CPAN، وقمت بتنزيل جميع المصادر، وقمت ببعض التغييرات (في ملف .MAK؟لدعم المواضيع، أو أشياء من هذا القبيل)، وقمت بتثبيت nmake / nmake test / nmake.بعد ذلك، شيئًا فشيئًا، قمت بتنزيل الوحدات الفردية من CPAN وقمت برقصة nmake.

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

ما هي الطريقة الأكثر موثوقية (والأسهل) لتحديث الإصدار الحالي الخاص بي، مع التأكد من أن كل ما قمت به باستخدام nmake Dance سيظل موجودًا بعد التحديث؟

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

المحلول

كما لاحظ آخرون، ابدأ بتثبيت بيرل الجديد في مكان منفصل.لقد قمت بتثبيت العديد من Perls، كل منها منفصل تمامًا عن الآخرين.

للقيام بذلك، سيتعين عليك تكوين المصادر وتجميعها بنفسك.عند تشغيل configure, ، ستتاح لك فرصة تحديد المثبت.لقد قدمت تعليمات مفصلة لهذا الأمر في "Compiling My Own Perl" في عدد ربيع 2008 من مراجعة بيرل.هناك أيضًا عنصر في برمجة بيرل الفعالة الذي يوضح لك كيفية القيام بذلك.

الآن، ارجع إلى التوزيعة الأصلية وقم بتشغيلها cpan -a لإنشاء ملف الحزمة التلقائية.هذا مستند Pod يسرد جميع العناصر الإضافية التي قمت بتثبيتها، ويفهم CPAN.pm كيفية استخدام ذلك لإعادة تثبيت كل شيء.

لتثبيت الأشياء في Perl الجديد، استخدم مسار Perl هذا لبدء CPAN.pm وتثبيت ملف الحزمة التلقائية الذي قمت بإنشائه.سيحصل CPAN.pm على مسارات التثبيت الصحيحة من تكوين Perl هذا.

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

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

حظ سعيد، :)

نصائح أخرى

سأفكر بجدية في النظر في الاستخدام الفراولة بيرل.

يمكنك تثبيت إصدار ثانٍ من Perl في موقع مختلف.سيتعين عليك إعادة تثبيت أي وحدات غير أساسية في الإصدار الجديد.بشكل عام، الإصدارات المختلفة من Perl ليست متوافقة مع الملفات الثنائية، مما قد يمثل مشكلة إذا كان لديك أي مكتبات خاصة بالبرنامج تستخدم مكونات XS.لا ينبغي أن تتأثر وحدات Pure Perl.

إذا بقيت ضمن المسار 5.8، فستستمر جميع الوحدات المثبتة التي تحتوي على امتدادات XS (ثنائية) في العمل، حيث يتم ضمان التوافق الثنائي ضمن نفس السلسلة 5.8.إذا انتقلت إلى الإصدار 5.10، فسيتعين عليك إعادة ترجمة أي وحدات تحتوي على مكونات XS.

كل ما عليك فعله هو التأكد من أن الإصدار الجديد يسرد الأدلة المضمنة السابقة في مصفوفة @INC الخاصة به (والتي تُستخدم للبحث عن الوحدات النمطية).

من خلال أصوات ذلك، أعتقد أنك تستخدم نظام التشغيل Windows، وفي هذه الحالة يمكن عرض مسارات @INC الحالية باستخدام

perl -le "print for @INC"

تأكد من استهداف إصدار Perl الجديد في دليل آخر.سوف تتعايش بسعادة مع الإصدار السابق ، وسيسمح لك ذلك باختيار تثبيت Perl الذي يتم استخدامه ؛إنها مجرد مسألة ترتيب أمر PATH الخاص بك.بمجرد بدء تشغيل مترجم Perl، فإنه يعرف أين يبحث عن بقية وحداته.

من المحتمل أن يكون Strawberry Perl هو أفضل توزيع على Windows هذه الأيام لتوزيعه بنفسك.

أعتقد أن الإجابة على هذا تنطوي على الافتراضية من نوع:

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

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

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

عندما فعلت ذلك قمت بتثبيت الإصدار الأحدث في دليل منفصل.هناك القليل من الارتباك الإضافي عند تشغيل نسختين، ولكنه يساعد بالتأكيد على التأكد من أن كل شيء يعمل أولاً، ويوفر طريقة سريعة للتبديل مرة أخرى إلى الإصدار القديم في حالة الضرورة.لقد قمت أيضًا بإعداد Apache لتشغيل خدمتين منفصلتين، حتى أتمكن من استخدام لغة Perl الأحدث في خدمة واحدة دون لمس خدمة الإنتاج في لغة Perl القديمة.

ربما يكون من الحكمة، بعد فوات الأوان، التثبيت على جهاز كمبيوتر منفصل وإجراء الاختبار هناك.سجل كل تغيير في التكوين تحتاج إلى إجرائه.

لست متأكدًا من إنشائه بنفسك — كنت دائمًا أستخدم الثنائيات المعبأة مسبقًا لنظام التشغيل Windows.

لست متأكدًا من أنني أفهم بالضبط ما تطلبه.هل لديك قائمة بالتغييرات التي أجريتها على ملف makefile 5.8؟أم أن السؤال هو كيفية الحصول على مثل هذه القائمة؟هل تسأل أيضًا عن كيفية معرفة الحزم الموجودة فوق التثبيت الأساسي التي حصلت عليها من CPAN؟هل تسأل أيضًا عن كيفية اختبار أن تغييراتك المخصصة لن تؤدي إلى كسر هذه الحزم إذا حصلت عليها من CPAN مرة أخرى؟

لماذا لا تستخدم ActivePerl وأداة "ppm" الخاصة به من أجل (إعادة) تثبيت الوحدات؟

alt text

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