Pip: AttributeError: الكائن "NoneType" ليس له سمة "is_hash_allowed"

تم إنشاؤها على ٢٣ يوليو ٢٠١٩  ·  18تعليقات  ·  مصدر: pypa/pip

بيئة

  • إصدار النقطة: 19.2
  • إصدار Python: 3.6.8
  • نظام التشغيل: Mac OSX (إصدار Darwin Kernel 18.6.0)

وصف
لقد أجريت تحديثًا للبيئة في مشروعي بما في ذلك النقطة أيضًا. بعد ذلك أردت التحقق من الحزم القديمة باستخدام الأمر:

pip list --outdated --format=columns

بعد أن أثير هذا الاستثناء.

سلوك متوقع
توقعت قائمة الحزم أو قائمة فارغة.

كيفية التكاثر

  1. احصل على أحدث إصدار من الحزمة من PyPI.
  2. ثم قم بتشغيل pip list --outdated --format=columns
  3. حدث خطأ.

انتاج |

(env) project (develop) $ pip list --outdated --format=columns
ERROR: Exception:
Traceback (most recent call last):
  File "/project/env/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 188, in main
    status = self.run(options, args)
  File "/project/env/lib/python3.6/site-packages/pip/_internal/commands/list.py", line 156, in run
    packages = self.get_outdated(packages, options)
  File "/project/env/lib/python3.6/site-packages/pip/_internal/commands/list.py", line 164, in get_outdated
    dist for dist in self.iter_packages_latest_infos(packages, options)
  File "/project/env/lib/python3.6/site-packages/pip/_internal/commands/list.py", line 164, in <listcomp>
    dist for dist in self.iter_packages_latest_infos(packages, options)
  File "/project/env/lib/python3.6/site-packages/pip/_internal/commands/list.py", line 195, in iter_packages_latest_infos
    best_candidate = evaluator.get_best_candidate(all_candidates)
  File "/project/env/lib/python3.6/site-packages/pip/_internal/index.py", line 729, in get_best_candidate
    best_candidate = max(candidates, key=self._sort_key)
  File "/project/env/lib/python3.6/site-packages/pip/_internal/index.py", line 710, in _sort_key
    has_allowed_hash = int(link.is_hash_allowed(self._hashes))
  File "/project/env/lib/python3.6/site-packages/pip/_internal/models/link.py", line 213, in is_hash_allowed
    return hashes.is_hash_allowed(self.hash_name, hex_digest=self.hash)
AttributeError: 'NoneType' object has no attribute 'is_hash_allowed'
lisshow auto-locked bug

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

الإصلاح في الماجستير. سأفعل الإصدار بعد قليل - الحصول على قسط من الراحة بعد يوم طويل اليوم.

ال 18 كومينتر

ptynecki شكرًا لتقديم هذه المشكلة!

/ cccjerdonek منذ أن عمل على هذا الجزء من قاعدة الكود وهو أكثر دراية به مني.

نفس المشكلة على Windows 10 ، Python 3.7.3

نفس المشكلة على Ubuntu 18.04.2 LTS و Python 3.6.8

نفس المشكلة على macOS 18.6.0 و Python 3.7.4

نفس المشكلة على Windows 10 ، Python 3.7.4

نفس المشكلة على Fedora 29 ، Python 3.7.3.

في الوقت الحالي ، كحل بديل ، ...

python3 -m pip install -UI --user  'pip<19.2'

أعاد تثبيت الإصدار 19.1.1 من pip . على الرغم من أن إخراج الأمر الكامل مثير للفضول.

$ python3 -m pip install -UI --user  'pip<19.2'
Collecting pip<19.2
  Using cached https://files.pythonhosted.org/packages/5c/e0/be401c003291b56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl
Installing collected packages: pip
Successfully installed pip-19.2

لماذا Successfully installed pip-19.2 عن

شكرًا لتأكيد حدوث ذلك على أنظمة تشغيل متعددة!

أيها الناس ، إذا كنت تواجه نفس المشكلة ، فالرجاء عدم نشر تعليقات إضافية. الرجاء استخدام ردود فعل GitHub للتأييد على المنشور الأول والاشتراك في المشكلة.

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

حسنًا ، أعتقد أن مدقق النوع فشلنا هنا. يشير التعليق التوضيحي للنوع إلى أن hashes يجب ألا يكون بلا ، لكنه لا يوجد في الحالات المبلغ عنها: https://github.com/pypa/pip/blob/369ec7c0a8a81a076ca5584c34c8530d7a30a220/src/pip/_internal/models/link .py # L202 -L209

بعد إلقاء نظرة سريعة ، أعتقد أن أحد الحلول الجيدة الآن قد يكون تحديث Link.is_hash_allowed(hashes) لإرجاع False إذا كان hashes لا شيء (وجعل التعليق التوضيحي في محاذاة عن طريق تحديث المعلمة إلى Optional[Hashes] ). ربما يكون هذا أبسط وأكثر تأكيدًا في هذه المرحلة من محاولة تحديث الأشياء في أماكن متعددة ربما للتأكد من أن الوسيطة hashes ليست دائمًا - None ، خاصة أننا لا نستطيع أن نبدو كذلك اعتمد على مدقق النوع للتأكيد بنسبة 100٪.

أعتقد أن مدقق النوع فشلنا هنا.

أهه. نعم - يُعد خيار strict_optional خطأً بالنسبة إلى pip._internal.index وهذا هو بالضبط هذا الفشل.

يبدو أننا لا نستطيع الاعتماد على مدقق النوع للتأكيد بنسبة 100٪.

نعم ، لا يمكننا الاعتماد عليها تمامًا ، طالما أن لدينا هذه العلامات للتبني المتزايد.

أهه. نعم - Strict_optional is False for pip._internal.index وهذا هو بالضبط هذا الفشل.

وعلى الرغم من أن models/link.py حيث يتم تعريف الوظيفة ، فقد تم تمكين strict_optional .

حسنًا ، لقد نشرت PR # 6774 لهذا الغرض.

تخبرني هذه المشكلة أن الخطوة الجيدة بعد ذلك (بالنسبة إلى 19.3 - وليس إصدار التصحيح) ستكون تشغيل strict_optional مقابل index.py ..

وعلى الرغم من أن النماذج / link.py حيث يتم تعريف الوظيفة ، تم تمكين خيار صارم.

نعم - يقوم mypy بالتحقق من موقع الاتصال ، باستخدام القواعد في موقع الاتصال.


الإصلاح المقترح والعلاقات العامة تبدو جيدة بالنسبة لي. إذا لم تظهر أي مشكلة أخرى ، فيمكنني إصدار إصلاح الأخطاء في مساء اليوم - حوالي 3-5 ساعات من الآن.

إذا لم تظهر أي مشكلة أخرى ، فيمكنني إصدار إصلاح الأخطاء في مساء اليوم - حوالي 3-5 ساعات من الآن.

هذا سيكون رائع. شكرا جزيلا لك على القيام بذلك.

مرحبا. FWIW لقد وجدت خطأ في 19.2 لا علاقة له بهذا. أحاول معرفة ذلك وسأفتح مشكلة جديدة بعد ذلك.

تعديل:
آه ، قام شخص ما بالفعل بفتح https://github.com/pypa/pip/issues/6775

الإصلاح في الماجستير. سأفعل الإصدار بعد قليل - الحصول على قسط من الراحة بعد يوم طويل اليوم.

تم تحميل الإصدار مع إصلاح الخطأ هذا. شكرا للجميع (وخاصة cjerdonek)! :)

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