Python-future: يكسر استيراد "configparser" السحري الجديد منفذ backport لـ "configparser"

تم إنشاؤها على ١٦ أكتوبر ٢٠١٤  ·  13تعليقات  ·  مصدر: PythonCharmers/python-future

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

يرجى النظر في إضافة configparser backport إلى قائمة متطلبات python-future ، والتي ستحل هذه المشكلة.

التعليق الأكثر فائدة

مع مرور الوقت ، يستخدم المزيد والمزيد من الأشخاص بشكل مباشر منفذ backport لمحلل التكوين ، لأن هذه هي الطريقة لاستخدام أحدث واجهة برمجة تطبيقات (وميزات) في المنبع أثناء استخدام Python 2.x.

وبالتالي ، فأنا لا أفهم حقًا مدى ملاءمة اختباراتك الفاشلة. إذا كنت تريد واجهة برمجة التطبيقات القديمة ، يمكنك استخدام اسم الوحدة القديم. إذا كنت تريد واجهة برمجة التطبيقات الجديدة ، يمكنك استخدام الاسم الجديد. لم يعد من المنطقي وضع 2.x ConfigParser في المكان الذي يوجد فيه بديل Python 3.

سيكون من الجيد الحصول على إصلاح لهذا الأمر حيث تلقيت تقريرًا عن هذا في Kali https://bugs.kali.org/view.php؟id=3245 وفي نظام Kali Linux النموذجي لدي حزم تحتاج إلى كل من python -future و python-configparser. إلا أن الأخير معطل لأي شخص يستخدمه على Python 2.x بسبب هذا الخطأ.

لتلخيص ذلك ، أعتقد أنه يجب عليك تنفيذ (1) وإسقاط الاختبارات حول configparser. (2) ليس أمرًا محظورًا لأن حزم دبيان مبنية في الحد الأدنى من البيئات ولن يكون python-configparser متاحًا عند تشغيل setup.py. (3) ممكن ولكنه يعني أن واجهة برمجة تطبيقات Python-Future تختلف اعتمادًا على كيفية تثبيتها. إنها حقًا ليست فكرة جيدة لأن التوزيع يمكن فقط تثبيته بطريقة واحدة.

شكرا لك! cc @ sbrun

ال 13 كومينتر

أيضًا ، في إعادة الشراء الخلفية ، أبلغ الأشخاص بالفعل عن أن هذا لا يعمل: https://bitbucket.org/ambv/configparser/issue/8/configparser-import-broken-on-py27

في الوقت الحالي ، كان علي إزالة الاعتماد على python-future في configparser لجعله يعمل.

+1

بشكل عام ، يجب ألا تقوم Python-Future بتثبيت الوحدات النمطية التي تحجب الوحدات النمطية الأخرى المثبتة من IMO. من غير المرجح أن تكون معظم المشكلات الأخرى مشكلات ، لذلك قد يكون من الأفضل القيام بذلك فقط بدلاً من إضافة تبعية زائفة.

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

  1. قم بإزالة configparser من python-Future وقم بتغيير المستندات للتوصية باستخدام حزمة configparser بدلاً من ذلك. قد يكون هذا منطقيًا ، ولكن ليس ما لم يكن configparser بديلًا مؤقتًا لـ ConfigParser في Py2.7. يوجد حاليًا 14 إخفاقًا و 9 أخطاء عند تشغيل test_cfgparser.py على Python 2.7.9 مع تثبيت حزمة configparser بعد استبدال import ConfigParser بـ import configparser as ConfigParser . مع تثبيت python-Future والاسم المستعار البسيط configparser الخاص به ، تنجح جميع الاختبارات نفسها.
  2. قم بتغيير setup.py في python-Future لتثبيت حزمة الاسم المستعار configparser فقط في حالة عدم وجود وحدة أو حزمة تحمل الاسم نفسه. العيب في ذلك هو أن الحزم المثبتة ستعتمد على الترتيب الذي تم إدراجها به في requirements.txt . والأسوأ من ذلك ، أعتقد أن pip لا يضمن تثبيت الحزم بالترتيب الذي تظهر به في requirements.txt . إذا تم إدراج كل من configparser و future ، فسيؤدي ذلك إلى أن تكون مجموعة الحزم المثبتة بواسطة pip غير حتمية.
  3. استخدم ميزة extras الخاصة بـ setuptools لدعم خيار التثبيت مثل pip install future[without_configparser] .

هل تعتقد أن الحزمة configparser يمكن تعديلها بحيث تمر مجموعة اختبار Python 2.7.9 عند استخدامها؟ هذا من شأنه أن يمنحني الثقة في التوصية بمسار ترقية سلس لكود Py2 الذي يستخدم حاليًا ConfigParser .

مع مرور الوقت ، يستخدم المزيد والمزيد من الأشخاص بشكل مباشر منفذ backport لمحلل التكوين ، لأن هذه هي الطريقة لاستخدام أحدث واجهة برمجة تطبيقات (وميزات) في المنبع أثناء استخدام Python 2.x.

وبالتالي ، فأنا لا أفهم حقًا مدى ملاءمة اختباراتك الفاشلة. إذا كنت تريد واجهة برمجة التطبيقات القديمة ، يمكنك استخدام اسم الوحدة القديم. إذا كنت تريد واجهة برمجة التطبيقات الجديدة ، يمكنك استخدام الاسم الجديد. لم يعد من المنطقي وضع 2.x ConfigParser في المكان الذي يوجد فيه بديل Python 3.

سيكون من الجيد الحصول على إصلاح لهذا الأمر حيث تلقيت تقريرًا عن هذا في Kali https://bugs.kali.org/view.php؟id=3245 وفي نظام Kali Linux النموذجي لدي حزم تحتاج إلى كل من python -future و python-configparser. إلا أن الأخير معطل لأي شخص يستخدمه على Python 2.x بسبب هذا الخطأ.

لتلخيص ذلك ، أعتقد أنه يجب عليك تنفيذ (1) وإسقاط الاختبارات حول configparser. (2) ليس أمرًا محظورًا لأن حزم دبيان مبنية في الحد الأدنى من البيئات ولن يكون python-configparser متاحًا عند تشغيل setup.py. (3) ممكن ولكنه يعني أن واجهة برمجة تطبيقات Python-Future تختلف اعتمادًا على كيفية تثبيتها. إنها حقًا ليست فكرة جيدة لأن التوزيع يمكن فقط تثبيته بطريقة واحدة.

شكرا لك! cc @ sbrun

في الوقت الحالي ، على سبيل المثال ، تقوم Fedora ببساطة بإصلاح محلل التهيئة نظرًا لأنها توفر أيضًا المنفذ الخلفي.

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

شكرا لمساهمتك ، الجميع!

أنا على استعداد لإزالة configparser من python-Future في الإصدار 0.16. لدي فرع قيد التقدم: https://github.com/PythonCharmers/python-future/tree/v0.16.x.

لقد جئت إلى هنا في محاولة لمعرفة سبب توقف ConfigParser.read_dict عن العمل على جهازي.

تبين أن إحدى الحزم التي أستخدمها بدأت اعتمادًا على python-future (على وجه التحديد جزء من QGIS) ، ثم تعرضت لهذه المشكلة لأن إصدار ConfigParser في Python 2.7 لا يطبق واجهة برمجة التطبيقات الكاملة لـ ConfigParser في Python 3.x.

لقد قمت بحل هذا عن طريق قفل إصدار الحزمة python-future :

sudo chmod 000 /usr/lib/python2.7/dist-packages/configparser/

أضاف Flake8 مؤخرًا اعتمادًا على منفذ backport للتكوين الذي يحتفظ بهambv بسخاء. قام بعض المستخدمين أيضًا بتثبيت هذه الوحدة التي كسرت السلوك الحالي والمختبر والموثق لـ Flake8. هذه مشكلة بالنسبة لنا ، وسأبدأ الآن في إضافة الوثائق إلى Flake8 لشرح لماذا قد يرى الناس مشكلة. سيتم ذكر المستقبل على وجه التحديد لمساعدة المستخدمين على تجنب هذه المتاعب.

@ sigmavirus24 Ian ، يمكنك حل هذه المشكلة في الوقت الحالي بالاعتماد على المنفذ الخلفي configparser واستخدام النموذج from backports import configparser . تم تنفيذ هذا على وجه التحديد لإلغاء حظر مواقف مثل هذه:

ambv شكرا! لم أدرك أنني أستطيع فعل ذلك.

لقد قمت الآن بإصدار v0.16.0 ، والذي يزيل configparser . توصي المستندات أيضًا باستخدام المنفذ الخلفي لـ Lukasz. شكرا لردود الفعل الجميع الخاص بك!

شكراedschofield!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات