python3.4 pip install fail
python3.4 환경에서 pip install이 실패하는 문제가 좀 전에 생겼다.
제일 의심스러운 건 얼마 전에 jupyter를 써보겠다고 conda update를 돌리고 jupyter를 설치한 건데 확실하진 않다.
이렇게 되는겨... 저기서 str이랑 None을 비교하나 보다. 소스를 까본다.
아, sort()에 key로 hashcmp attr를 넘기네. 그럼 hashcmp를 찾아보자.
아따 뭘 많이도 반환하네. 우선 반환하는 튜플을 한번 찍어볼까?
return(...)을 복사해서 return 전에 붙이고 print로 바꿔준다. 요로케. 흐흐흐
그리고 다시 pip를 해보면? 짜잔~
self.platform이 None인 경우는 너무 흔하고, 가끔 self.py_version까지 None인 녀석들이 있다.
그랬구나. 그래서 TypeError가 났던거였구나. 내가 고쳐줄게 우쭈쭈쭈.
py_version과 platform이 None인 경우에는 ''를 반환하도록 고쳐준다.
문제가 해결이 되었나 확인해볼까?
ㅋㅋㅋㅋㅋ 잘된다! 한 건 했으니까 PR 날려야지 룰루~
...
Aㅏ...
https://bitbucket.org/pypa/setuptools/pull-request/122/ensure-py_version-and-platform-are-str-in/diff
삽질한게 아까워서 블로그에 기록. 역시 이런 거저 먹는 꿀 버그는 먼저 밟는 사람이 임자다.
이 버그 한달만 빨리 밟았어도 setuptools에 커밋 하나 하는건데 아쉽 ㅠㅠ
P.S) 쓰고 나니 konlpy PPL 글이 되버렸다.
제일 의심스러운 건 얼마 전에 jupyter를 써보겠다고 conda update를 돌리고 jupyter를 설치한 건데 확실하진 않다.
scari@sylvanas:~/codes$ python --version Python 3.4.3 :: Anaconda 2.1.0 (x86_64) scari@sylvanas:~/codes$ pip --version pip 6.0.8 from /Users/scari/anaconda3/lib/python3.4/site-packages (python 3.4)
scari@sylvanas:~/codes$ pip install konlpy Exception: Traceback (most recent call last): File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/basecommand.py", line 232, in main status = self.run(options, args) File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/commands/install.py", line 339, in run requirement_set.prepare_files(finder) File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/req/req_set.py", line 229, in prepare_files req_to_install.check_if_exists() File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/req/req_install.py", line 931, in check_if_exists self.satisfied_by = pkg_resources.get_distribution(self.req) File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/_vendor/pkg_resources/__init__.py", line 461, in get_distribution dist = get_provider(dist) File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/_vendor/pkg_resources/__init__.py", line 341, in get_provider return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/_vendor/pkg_resources/__init__.py", line 870, in require needed = self.resolve(parse_requirements(requirements)) File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/_vendor/pkg_resources/__init__.py", line 740, in resolve env = Environment(self.entries) File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/_vendor/pkg_resources/__init__.py", line 927, in __init__ self.scan(search_path) File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/_vendor/pkg_resources/__init__.py", line 957, in scan self.add(dist) File "/Users/scari/anaconda3/lib/python3.4/site-packages/pip/_vendor/pkg_resources/__init__.py", line 977, in add dists.sort(key=operator.attrgetter('hashcmp'), reverse=True) TypeError: unorderable types: str() < NoneType()
이렇게 되는겨... 저기서 str이랑 None을 비교하나 보다. 소스를 까본다.
970 def add(self, dist): 971 """Add `dist` if we ``can_add()`` it and it has not already been added 972 """ 973 if self.can_add(dist) and dist.has_version(): 974 dists = self._distmap.setdefault(dist.key, []) 975 if dist not in dists: 976 dists.append(dist) 977 dists.sort(key=operator.attrgetter('hashcmp'), reverse=True)
아, sort()에 key로 hashcmp attr를 넘기네. 그럼 hashcmp를 찾아보자.
2388 @property 2389 def hashcmp(self): 2390 return ( 2391 self.parsed_version, 2392 self.precedence, 2393 self.key, 2394 _remove_md5_fragment(self.location), 2395 self.py_version, 2396 self.platform, 2397 )
아따 뭘 많이도 반환하네. 우선 반환하는 튜플을 한번 찍어볼까?
return(...)을 복사해서 return 전에 붙이고 print로 바꿔준다. 요로케. 흐흐흐
2388 @property 2389 def hashcmp(self): 2390 print ( 2391 self.parsed_version, 2392 self.precedence, 2393 self.key, 2394 _remove_md5_fragment(self.location), 2395 self.py_version, 2396 self.platform, 2397 ) 2398 return ( 2399 self.parsed_version, 2400 self.precedence, 2401 self.key, 2402 _remove_md5_fragment(self.location), 2403 self.py_version, 2404 self.platform, 2405 )
그리고 다시 pip를 해보면? 짜잔~
scari@sylvanas:~/codes$ pip install konlpy [snip] 0.8.1 -1 bokeh /Users/scari/anaconda3/lib/python3.4/site-packages 3.4 None 2.32.1 -1 boto /Users/scari/anaconda3/lib/python3.4/site-packages 3.4 None 1.0.0 -1 cachetools /Users/scari/anaconda3/lib/python3.4/site-packages None None 0.8.6 -1 cffi /Users/scari/anaconda3/lib/python3.4/site-packages 3.4 macosx-10.5-x86_64 0.3.3 -1 colorama /Users/scari/anaconda3/lib/python3.4/site-packages 3.4 None [snip]
self.platform이 None인 경우는 너무 흔하고, 가끔 self.py_version까지 None인 녀석들이 있다.
그랬구나. 그래서 TypeError가 났던거였구나. 내가 고쳐줄게 우쭈쭈쭈.
py_version과 platform이 None인 경우에는 ''를 반환하도록 고쳐준다.
2388 @property 2389 def hashcmp(self): 2390 return ( 2391 self.parsed_version, 2392 self.precedence, 2393 self.key, 2394 _remove_md5_fragment(self.location), 2395 self.py_version or '', 2396 self.platform or '', 2397 )
문제가 해결이 되었나 확인해볼까?
scari@sylvanas:~/codes$ pip install konlpy Collecting konlpy Downloading konlpy-0.4.3-py2.py3-none-any.whl (22.4MB) 100% |################################| 22.5MB 12kB/s [snip] Successfully installed JPype1-py3-0.5.5.2 konlpy-0.4.3
ㅋㅋㅋㅋㅋ 잘된다! 한 건 했으니까 PR 날려야지 룰루~
...
Aㅏ...
https://bitbucket.org/pypa/setuptools/pull-request/122/ensure-py_version-and-platform-are-str-in/diff
삽질한게 아까워서 블로그에 기록. 역시 이런 거저 먹는 꿀 버그는 먼저 밟는 사람이 임자다.
이 버그 한달만 빨리 밟았어도 setuptools에 커밋 하나 하는건데 아쉽 ㅠㅠ
P.S) 쓰고 나니 konlpy PPL 글이 되버렸다.
댓글
댓글 쓰기