الانتقال من Python2.4 إلى Python2.6 على CentOS.مشكلة ترحيل الوحدة النمطية

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

سؤال

يا شباب، لدي مشكلة في ترقية لغة بايثون من 2.4 إلى 2.6:

لدي CentOS 5 (كامل)
لديها بيثون 2.4 تعيش في /usr/lib/python2.4/
توجد وحدات إضافية في /usr/lib/python2.4/site-packages/

لقد قمت ببناء python 2.6 من مصادر في /usr/local/lib/python2.6/
لقد قمت بتعيين python الافتراضي على python2.6
الآن أصبحت الوحدات القديمة لـ 2.4 خارج pythonpath و"مفقودة"
على وجه الخصوص، تم كسر yum ("لا توجد وحدة باسم yum")

إذن ما هي الطريقة الصحيحة لترحيل/تثبيت الوحدات النمطية إلى python2.6؟

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

المحلول

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

نعم، عند تثبيت Python، ستستبدل أمر python بالإصدار المثبت (ما لم تقم بتشغيله باستخدام --alt-install).أنت لا تحدد بالضبط ما هي مشكلتك، لذلك سأخمن.مشكلتك هي أن العديد من الأوامر المحلية التي تستخدم Python تفشل الآن، لأنه يتم تنفيذها باستخدام Python 2.6، وليس باستخدام Python 2.4.هل هذا صحيح؟

إذا كان الأمر كذلك، فما عليك سوى حذف /usr/local/bin/python، وتأكد من أن /usr/bin/python هو رابط رمزي لـ /usr/bin/python2.4.ثم سيتعين عليك كتابة python2.6 لتشغيل python2,6، لكن لا بأس بذلك.هذه هي أفضل طريقة للقيام بذلك.ثم تحتاج فقط إلى تثبيت الحزم أنت الحاجة في 2.6.

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

easy_install <modulename>

سيتم تنزيل الوحدة من pypi.python.org وتثبيتها.وسوف يقوم أيضًا بتثبيت أي وحدة نمطية تابعة.يمكن لـ easy_install تثبيت أي وحدة تستخدم distutils كمثبت، ولا يفعل الكثير منها.وهذا سيجعل تثبيت 90% من هذه الوحدات أمرًا سهلاً.

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

لا يجب عليك استخدام الروابط الرمزية بين الإصدارات، لأن المكتبات بشكل عام مخصصة لإصدار معين.بالنسبة للإصدارين 2.4 و2.6، أعتقد أن ملفات .pyc متوافقة (لكنني لست متأكدًا بنسبة 100%)، لذلك قد ينجح ذلك، ولكن أي وحدة تستخدم لغة C سوف استراحة.والإصدارات الأخرى من Python ستحتوي على ملفات .pyc غير متوافقة أيضًا.وأنا متأكد من أنك إذا قمت بذلك، فإن معظم الأشخاص في بايثون لن يساعدوك إذا قمت بذلك.؛-)

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

نصائح أخرى

يوجد خيارين...

  1. إذا كانت الوحدات سيتم تشغيلها ضمن Python 2.6، فيمكنك ببساطة إنشاء روابط رمزية لها من دليل حزم الموقع 2.6 إلى دليل حزم المواقع 2.4.

  2. إذا لم يتم تشغيلها تحت الإصدار 2.6، فقد تحتاج إلى إعادة تجميعها مقابل الإصدار 2.6، أو تثبيت إصدارات محدثة منها.فقط تأكد من أنك تستخدم 2.6 عند الاتصال "python setup.py"

...

قد ترغب في نشر هذا على serverfault.com، إذا واجهت تحديات إضافية.

وربما لا يزال بعض يبس بيثون لا يمكن الوصول إليها كما هو الحال مع بيثون 2.6 site-packages يتم تغيير إلى dist-packages.

والطريقة الوحيدة في هذه الحالة هي القيام بنقل كافة الاشياء ولدت في حزم الموقع (على سبيل المثال عن طريق make install) إلى حي-حزم وإنشاء الارتباط SYM.

يعد easy_install طريقة جيدة ولكن هناك طريقة منخفضة المستوى لتثبيت الوحدة، فقط:

  1. فك مصدر الوحدة النمطية إلى بعض الدليل
  2. اكتب "تثبيت بيثون setup.py"

بالطبع يجب عليك القيام بذلك باستخدام إصدار مترجم بايثون المثبت المطلوب؛للتحقق من ذلك اكتب:

بايثون -V

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