рд╡рд╛рддрд╛рд╡рд░рдг
рд╡рд┐рд╡рд░рдг
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ env рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдкрд╛рдЗрдк рднреА рд╢рд╛рдорд┐рд▓ рдерд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рдиреЗ рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:
pip list --outdated --format=columns
рдЙрд╕рдХреЗ рдмрд╛рдж рдЕрдкрд╡рд╛рдж рдЙрдард╛рдпрд╛ рдЧрдпрд╛ред
рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░
рдореБрдЭреЗ рдкреИрдХреЗрдЬ рдХреА рд╕реВрдЪреА рдпрд╛ рдЦрд╛рд▓реА рд╕реВрдЪреА рдХреА рдЙрдореНрдореАрдж рдереАред
рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░реЗрдВ
pip list --outdated --format=columns
рдЪрд▓рд╛рдПрдВрдЙрддреНрдкрд╛рджрди
(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'
@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)! :)
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдлрд┐рдХреНрд╕ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╣реИред рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдореЗрдВ рд░рд┐рд▓реАрдЬ рдХрд░реВрдВрдЧрд╛ - рдЖрдЬ рджрд┐рди рднрд░ рдХреЗ рдмрд╛рдж рдереЛрдбрд╝рд╛ рдЖрд░рд╛рдо рдорд┐рд▓реЗрдЧрд╛ред