νκ²½
κΈ°μ
λ΄ νλ‘μ νΈμμ pipλ ν¬ν¨νμ¬ 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 κ·Έκ° μ½λλ² μ΄μ€μμ΄ λΆλΆμμ μΌνκ³ λλ³΄λ€ κ·Έκ²μ λ μ΅μνκΈ° λλ¬Έμ λλ€.
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'
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
λ³΄κ³ νλ μ΄μ λ 무μμ
λκΉ?
μ¬λ¬ OSμμ λ°μνλ κ²μ νμΈν΄ μ£Όμ μ κ°μ¬ν©λλ€!
μ¬λ¬λΆ, κ°μ λ¬Έμ μ μ§λ©΄νλ€λ©΄ μΆκ° λκΈμ μ¬λ¦¬μ§ λ§μμμ€. GitHub λ°μμ μ¬μ©νμ¬ μ²« λ²μ§Έ κ²μλ¬Όμ μ°¬μ±νκ³ λ¬Έμ λ₯Ό ꡬλ νμμμ€.
μ΄λ κ²νλ©΄ κ΄λ¦¬μκ°μ΄ λ¬Έμ μμμ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ λ°©λ²μ λν΄ ν λ‘ ν μ μμ΅λλ€. μΆκ° "λλ"μ£Όμμ λꡬμκ²λ λμμ΄λμ§ μμ΅λλ€.
ν , μ ν κ²μ¬κΈ°κ° μ¬κΈ°μ μ€ν¨ν κ² κ°μ΅λλ€. μ ν μ£Όμμλ hashes
κ° Noneμ΄ μλμ΄μΌνμ§λ§λ³΄κ³ λ μ¬λ‘μμλ Noneμ
λλ€. https://github.com/pypa/pip/blob/369ec7c0a8a81a076ca5584c34c8530d7a30a220/src/pip/_internal/models/link .py # L202 -L209
μ κΉ μ΄ν΄λ³΄λ©΄, hashes
κ° None μΈ κ²½μ° False
λ₯Ό λ°ννλλ‘ Link.is_hash_allowed(hashes)
λ₯Ό μ
λ°μ΄νΈνκ³ λ§€κ° λ³μλ₯Ό μ
λ°μ΄νΈνμ¬ μ£Όμμ μ λ ¬νλ κ²μ΄ μ’μ΅λλ€. ~ Optional[Hashes]
). hashes
μΈμκ° νμ λΉ None
μμ 보μ₯νκΈ° μν΄ μ¬λ¬ μμΉμμ νλͺ©μ μ
λ°μ΄νΈνλ κ²λ³΄λ€μ΄ μμ μμ λ κ°λ¨νκ³ νμ€ν©λλ€. μ ν κ²μ¬κΈ°μ κΈ°λμ΄ 100 % νμ€νκ² νμΈνμμμ€.
μ ν κ²μ¬κΈ°κ° μ¬κΈ°μ μ€ν¨ν κ² κ°μ΅λλ€.
μ. λ€-strict_optionalμ pip._internal.index
λν΄ Falseμ΄λ©° μ΄κ²μ΄ λ°λ‘ μ€ν¨μ
λλ€.
100 % νμ€νκ² νμΈνκΈ° μν΄ μ ν κ²μ¬κΈ°μ μμ§ ν μμλ κ² κ°μ΅λλ€.
μ, μ μ§μ μ±νμ μν΄ μ΄λ¬ν νλκ·Έκ°μλ ν μμ ν μ λ’°ν μλ μμ΅λλ€.
μ. λ€-strict_optionalμ pip._internal.indexμ λν΄ Falseμ΄λ©° μ΄κ²μ΄ λ°λ‘ μ€ν¨μ λλ€.
κ·Έλ¦¬κ³ ν¨μκ° μ μ λ models/link.py
μλ strict_optional
νμ±νλμ΄ μμ΅λλ€.
μκ² μ΅λλ€. PR # 6774λ₯Ό κ²μνμ΅λλ€.
μ΄ λ¬Έμ λ (ν¨μΉ 릴리μ€κ° μλ 19.3μ κ²½μ°) μ΄νμ μ’μ λ¨κ³λ index.py
μ λν΄ strict_optional
μΌλ κ²μ
λλ€ ..
ν¨μκ° μ μ λ models / link.pyμλ strict_optionalμ΄ νμ±νλμ΄ μμ΅λλ€.
μ-mypyλ νΈμΆ μ¬μ΄νΈμ κ·μΉμ μ¬μ©νμ¬ νΈμΆ μ¬μ΄νΈμμ νμΈν©λλ€.
κ·νκ° μ μν μμ μ¬ν λ° PRμ λμκ² μ 보μ λλ€. λ€λ₯Έ λ¬Έμ κ° λ°μνμ§ μμΌλ©΄ μ€λ μ λ μ λ²κ·Έ μμ 릴리μ€λ₯Ό μν ν μ μμ΅λλ€. μ§κΈλΆν° 3 ~ 5 μκ° νμ λλ€.
λ€λ₯Έ λ¬Έμ κ° λ°μνμ§ μμΌλ©΄ μ€λ μ λ μ λ²κ·Έ μμ 릴리μ€λ₯Ό μν ν μ μμ΅λλ€. μ§κΈλΆν° 3 ~ 5 μκ° νμ λλ€.
κ·Έκ²μ μ’μ κ²μ λλ€. κ·Έλ κ² ν΄μ£Όμ μ κ°μ¬ν©λλ€.
μλ νμΈμ. FWIW 19.2μμμ΄ λ²κ·Έμ κ΄λ ¨μ΄μλ λ²κ·Έλ₯Ό λ°κ²¬νμ μ μμ΅λλ€. λλ κ·Έκ²μ μ¬μ ν νμ νλ €κ³ λ Έλ ₯νκ³ μμΌλ©° λμ€μ μλ‘μ΄ λ¬Έμ λ₯Ό μ΄ ββκ²μ λλ€.
νΈμ§νλ€:
μ, λκ΅°κ° μ΄λ―Έ https://github.com/pypa/pip/issues/6775 νλλ₯Ό μ΄μμ΅λλ€.
μμ μ¬νμ λ§μ€ν°μ μμ΅λλ€. λλ μ€λ κΈ΄ ν루λ₯Ό λ³΄λΈ ν μ½κ°μ ν΄μμ μ·¨νλ©΄μ μ‘°κΈ νμ 릴리μ€λ₯Ό ν κ²μ λλ€.
μ΄ λ²κ·Έ μμ μ΄ ν¬ν¨ λ 릴리μ€κ° μ λ‘λλμμ΅λλ€. λͺ¨λμκ² κ°μ¬ν©λλ€ (νΉν @cjerdonek)! :)
κ°μ₯ μ μ©ν λκΈ
μμ μ¬νμ λ§μ€ν°μ μμ΅λλ€. λλ μ€λ κΈ΄ ν루λ₯Ό λ³΄λΈ ν μ½κ°μ ν΄μμ μ·¨νλ©΄μ μ‘°κΈ νμ 릴리μ€λ₯Ό ν κ²μ λλ€.