Pip: AttributeError: Objek 'NoneType' tidak memiliki atribut 'is_hash_allowed'

Dibuat pada 23 Jul 2019  ·  18Komentar  ·  Sumber: pypa/pip

Lingkungan Hidup

  • versi pip: 19.2
  • Versi Python: 3.6.8
  • OS: Mac OSX (Versi Kernel Darwin 18.6.0)

Deskripsi
Saya membuat pembaruan env dalam proyek saya termasuk pip juga. Setelah itu saya ingin memeriksa paket yang sudah ketinggalan zaman dengan perintah:

pip list --outdated --format=columns

Setelah pengecualian itu dimunculkan.

Perilaku yang diharapkan
Saya mengharapkan daftar paket atau daftar kosong.

Bagaimana cara bereproduksi

  1. Dapatkan paket versi terbaru dari PyPI.
  2. Kemudian jalankan pip list --outdated --format=columns
  3. Terjadi kesalahan.

Keluaran

(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

Komentar yang paling membantu

Perbaikannya ada di master. Saya akan merilisnya sebentar lagi - sedikit istirahat setelah hari yang melelahkan hari ini.

Semua 18 komentar

@ptynecki Terima kasih telah

/ cc @cjerdonek karena dia mengerjakan bagian basis kode ini dan lebih mengenalnya daripada saya.

Masalah yang sama di Windows 10, Python 3.7.3

Masalah yang sama di Ubuntu 18.04.2 LTS, Python 3.6.8

Masalah yang sama di macOS 18.6.0 dan Python 3.7.4

Masalah yang sama di Windows 10, Python 3.7.4

Masalah yang sama di Fedora 29, Python 3.7.3.

Untuk saat ini, sebagai solusi, ...

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

menginstal ulang pip versi 19.1.1. Meskipun, keluaran perintah lengkapnya membuat penasaran.

$ 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

Mengapa melaporkan Successfully installed pip-19.2 ?

Terima kasih atas konfirmasi ini terjadi di beberapa OS!

Teman-teman, jika Anda menghadapi masalah yang sama, mohon jangan mengirim komentar tambahan. Silakan gunakan reaksi GitHub untuk memberi suara positif pada posting pertama dan berlangganan masalah.

Dengan cara itu pengelola dapat berdiskusi tentang cara menyelesaikan masalah ini dalam masalah ini - komentar tambahan "saya juga" tidak akan membantu siapa pun.

Hmm, kurasa pemeriksa tipe mengecewakan kita di sini. Anotasi jenis mengatakan hashes harus non-None, tetapi None dalam kasus yang dilaporkan: https://github.com/pypa/pip/blob/369ec7c0a8a81a076ca5584c34c8530d7a30a220/src/pip/_internal/models/link .py # L202 -L209

Setelah melihat sekilas, saya pikir perbaikan yang baik untuk saat ini mungkin memperbarui Link.is_hash_allowed(hashes) untuk mengembalikan False jika hashes adalah Tidak Ada (dan membawa anotasi agar selaras dengan memperbarui parameter menjadi Optional[Hashes] ). Itu mungkin lebih sederhana dan lebih pasti pada saat ini daripada mencoba memperbarui sesuatu di beberapa tempat yang mungkin untuk memastikan bahwa argumen hashes selalu bukan- None , terutama karena sepertinya kita tidak bisa bersandar pada pemeriksa tipe untuk mengonfirmasi dengan kepastian 100%.

Saya kira pemeriksa tipe mengecewakan kita di sini.

Ahhh. Ya - strict_optional adalah False untuk pip._internal.index dan inilah tepatnya kegagalan itu.

kita tidak bisa bersandar pada pemeriksa tipe untuk mengonfirmasi dengan kepastian 100%.

Ya, kami tidak dapat sepenuhnya mengandalkannya, selama kami memiliki tanda ini untuk adopsi tambahan.

Ahhh. Ya - strict_optional adalah False untuk pip._internal.index dan inilah tepatnya kegagalan itu.

Dan meskipun models/link.py mana fungsi didefinisikan memiliki strict_optional diaktifkan.

Oke, saya memposting PR # 6774 untuk ini.

Masalah ini memberi tahu saya bahwa langkah yang baik setelah ini (untuk 19.3 - bukan rilis patch) adalah mengaktifkan strict_optional untuk index.py ..

Dan meskipun model / link.py di mana fungsi didefinisikan memang memiliki strict_optional diaktifkan.

Ya - mypy melakukan pemeriksaan di situs panggilan, menggunakan aturan di situs panggilan.


Perbaikan dan PR yang Anda sarankan terlihat bagus bagi saya. Jika kami tidak melihat masalah lain muncul, saya dapat melakukan rilis perbaikan bug pada malam hari ini - ~ 3-5 jam dari sekarang.

Jika kami tidak melihat masalah lain muncul, saya dapat melakukan rilis perbaikan bug pada malam hari ini - ~ 3-5 jam dari sekarang.

Itu akan bagus. Terima kasih banyak telah melakukannya.

Halo. FWIW Saya mungkin menemukan bug di 19.2 yang tidak berhubungan dengan yang satu ini. Saya mencoba untuk mengetahuinya diam-diam dan akan membuka masalah baru setelahnya.

EDIT:
Ah, seseorang sudah membukanya https://github.com/pypa/pip/issues/6775

Perbaikannya ada di master. Saya akan merilisnya sebentar lagi - sedikit istirahat setelah hari yang melelahkan hari ini.

Rilis dengan perbaikan bug ini telah diunggah. Terima kasih semuanya (dan terutama @cjerdonek)! :)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat