Pip: рдЧреБрдг: 'рдХреЛрдИ рдирд╣реАрдВ' рд╡рд╕реНрддреБ рдХрд╛ рдХреЛрдИ рдЧреБрдг рдирд╣реАрдВ рд╣реИ 'is_hash_allowed'

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдЬреБрд▓ре░ 2019  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pypa/pip

рд╡рд╛рддрд╛рд╡рд░рдг

  • рдкрд╛рдЗрдк рд╕рдВрд╕реНрдХрд░рдг: 19.2
  • рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг: 3.6.8
  • OS: рдореИрдХ OSX (рдбрд╛рд░реНрд╡рд┐рди рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг 18.6.0)

рд╡рд┐рд╡рд░рдг
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ env рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдкрд╛рдЗрдк рднреА рд╢рд╛рдорд┐рд▓ рдерд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рдиреЗ рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

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 рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

/ cc @cjerdonek рдЬрдм рд╕реЗ рдЙрд╕рдиреЗ рдХреЛрдбрдмреЗрд╕ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╡рд╣ рдореБрдЭрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реИред

рд╡рд┐рдВрдбреЛрдЬ 10, рдкрд╛рдпрдерди 3.7.3 рдкрд░ рд╕рдорд╛рди рдореБрджреНрджрд╛

рдЙрдмрдВрдЯреВ 18.04.2 рдПрд▓рдЯреАрдПрд╕, рдкрд╛рдпрдерди 3.6.8 рдкрд░ рд╕рдорд╛рди рдЕрдВрдХ

MacOS 18.6.0 рдФрд░ рдкрд╛рдпрдерди 3.7.4 рдкрд░ рд╕рдорд╛рди рдЕрдВрдХ

рд╡рд┐рдВрдбреЛрдЬ 10, рдкрд╛рдпрдерди 3.7.4 рдкрд░ рд╕рдорд╛рди рдЕрдВрдХ

рдлреЗрдбреЛрд░рд╛ 29, рдкрд╛рдпрдерди 3.7.3 рдкрд░ рд╕рдорд╛рди рдЕрдВрдХред

рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ ...

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

рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд pip рд╕рдВрд╕реНрдХрд░рдг 19.1.1ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреВрд░рд╛ рдХрдорд╛рдВрдб рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрд╕реБрдХ рд╣реИред

$ 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 рд░рд┐рдкреЛрд░реНрдЯ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ?

рдЗрд╕ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрдИ OSes рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА!

рджреЛрд╕реНрддреЛрдВ, рдпрджрд┐ рдЖрдк рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкреЛрд╕реНрдЯ рди рдХрд░реЗрдВред рдХреГрдкрдпрд╛ рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП GitHub рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ - рдЕрддрд┐рд░рд┐рдХреНрдд "рдореБрдЭреЗ рднреА" рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдХрд┐рд╕реА рдХреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреАред

рд╣рдореНрдо, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдБ рдлреЗрд▓ рд╣реЛ рдЧрдпрд╛ред рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ hashes рдЧреИрд░-рдХреЛрдИ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ: https://github.com/pypa/pip/blob/369ec7c0a8a81a76a55cac8484c8530d7a30a220/src/pip/_internal/models .py # L202 -L209

рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдареАрдХ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ Link.is_hash_allowed(hashes) рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП False рдЕрдЧрд░ hashes рдХреЛрдИ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рд╕рдВрд░реЗрдЦрдг рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рд▓рд╛рдиреЗ Optional[Hashes] )ред рд╕рдВрднрд╡рддрдГ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд-рдЖрдЧ рд╣реИ рдХрд┐ рд╕рдВрднрд╡рддрдГ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ hashes рддрд░реНрдХ рд╣рдореЗрд╢рд╛ рдЧреИрд░- None , рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рд╣рдо рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред 100% рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рдкрд░ рдЭреБрдХреЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рдиреЗ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдлреЗрд▓ рдХрд░ рджрд┐рдпрд╛ред

рдЕрд╣рд╣ред рд╣рд╛рдВ - рд╕рдЦреНрдд_рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА pip._internal.index рд▓рд┐рдП рдЧрд▓рдд рд╣реИ рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдлрд▓рддрд╛ рд╣реИред

рд╣рдо 100% рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рдкрд░ рджреБрдмрд▓реЗ рдирд╣реАрдВ рджрд┐рдЦ рд╕рдХрддреЗред

рд╣рд╛рдБ, рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬрдм рддрдХ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЧреЛрдж рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпреЗ рдЭрдВрдбреЗ рд╣реИрдВред

рдЕрд╣рд╣ред рд╣рд╛рдВ - рд╕рдЦреНрдд_рдкреНрд░реЛрдлреЗрд╢рдирд▓ рдкрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд╣реИред рдЕрдирдиреНрдд.рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдлрд▓рддрд╛ рд╣реИред

рдФрд░ рднрд▓реЗ рд╣реА models/link.py рдЬрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рдореЗрдВ strict_optional рд╕рдХреНрд╖рдо рд╣реИред

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП PR # 6774 рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред

рдпрд╣ рдореБрджреНрджрд╛ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрджрдо (19.3 рдХреЗ рд▓рд┐рдП - рдкреИрдЪ рд░рд┐рд▓реАрдЬ рдирд╣реАрдВ) strict_optional index.py рд▓рд┐рдП рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдФрд░ рднрд▓реЗ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдЬрд╣рд╛рдВ рдореЙрдбрд▓ / рд▓рд┐рдВрдХрдПрдбрдПрдордХреЗ рдХреЗ рдкрд╛рд╕ рд╕рдЦреНрдд_рдЙрдкрдпреЛрдЧреА рд╕рдХреНрд╖рдо рд╣реИред

Yea - рдХреЙрд▓ рд╕рд╛рдЗрдЯ рдкрд░ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ mypy рдХреЙрд▓ рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред


рдЖрдкрдХреЗ рд╕реБрдЭрд╛рдП рдЧрдП рд╕реБрдзрд╛рд░ рдФрд░ рдкреАрдЖрд░ рдореБрдЭреЗ рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╣рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдореБрджреНрджрд╛ рд╕рд╛рдордиреЗ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдЬ рд╢рд╛рдо рдмрдЧрдлрд┐рдХреНрд╕ рд░рд┐рд▓реАрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ - рдЕрдм рд╕реЗ 3-5 рдШрдВрдЯреЗред

рдЕрдЧрд░ рд╣рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдореБрджреНрджрд╛ рд╕рд╛рдордиреЗ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдЬ рд╢рд╛рдо рдмрдЧрдлрд┐рдХреНрд╕ рд░рд┐рд▓реАрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ - рдЕрдм рд╕реЗ 3-5 рдШрдВрдЯреЗред

рд╡рд╣ рдорд╣рд╛рди рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдирдорд╕реНрддреЗред FWIW рдореБрдЭреЗ 19.2 рдореЗрдВ рдПрдХ рдмрдЧ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реВрдВрдЧрд╛ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдЖрд╣, рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ https://github.com/pypa/pip/issues/6775 рдЦреЛрд▓рд╛ рд╣реИ

рдлрд┐рдХреНрд╕ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╣реИред рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдореЗрдВ рд░рд┐рд▓реАрдЬ рдХрд░реВрдВрдЧрд╛ - рдЖрдЬ рджрд┐рди рднрд░ рдХреЗ рдмрд╛рдж рдереЛрдбрд╝рд╛ рдЖрд░рд╛рдо рдорд┐рд▓реЗрдЧрд╛ред

рдЗрд╕ рдмрдЧ-рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж (рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @cjerdonek)! :)

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

therefromhere picture therefromhere  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

imzi picture imzi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

reynoldsnlp picture reynoldsnlp  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jiapei100 picture jiapei100  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nathan130200 picture nathan130200  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ