출처: http://blog.lyuwonkyung.com/windows-pipeseo-unicodedecodeerror-balsaeng-2/
센터에서 지원받아 사용하던 13인치 맥북을 반납하고, 내 개인 15인치 맥북은 사무실에 상주시키기로 하였기에 집에서는 다시 윈도우 노트북으로 작업을 하게 되었다. 고작 15개월간 맥으로 갈아타 개발을 했을 뿐인데 다시 돌아온 윈도우는 개발하기에 너무나도 불편하였다! (내가 유별난게 아닐것이다!) 결국 우분투를 설치해도 보았지만, Wine으로 카카오톡이나 멜론을 정상 실행할 수 없었기에 결국 다시 윈도우로는 와야하겠고.. (카톡만 잘 되었어도 그냥 버텼을텐데, 새로운 메시지가 오자마자 Crash가 터지는 이유를 도저히 알 수 없었다.) 이런 와중에 윈도우에 개발 환경을 다 세팅하고 Flask 개발을 위해 pip install Flask
를 입력하는 순간 UnicodeDecodeError
예외가 나를 당황스럽게 만들었다.
물론 인터넷에 여러가지 해결책이 나와있지만, 그 해결책 각각들은 내게 도움이 되지 않았고, 간만에 아주 긴 삽질을 통해 두 가지의 아티클을 조합하여 문제를 해결하였다! (문제는 당연히도 비유니코드 문자열 이슈 때문인듯 하다. 아마도 경로에 들어있는 멀티바이트 문자 같은 것들 때문인듯.)
Python이 설치된 경로(e.g. 나의 경우에는 C:\python)의 lib 디렉토리(윈도니까 폴더라고 해야하는 것인가)에 있는 site.py(c:\python\lib\site.py)를 열어 479, 490 라인의
ascii
를utf-8
로 수정한다.def setencoding(): """Set the string encoding used by the Unicode implementation. The default is 'ascii', but if you're willing to experiment, you can change this.""" encoding = "utf-8" # Default value set by _PyUnicode_Init() # 요기! if 0: # Enable to support locale aware default string encodings. import locale loc = locale.getdefaultlocale() if loc[1]: encoding = loc[1] if 0: # Enable to switch off string to Unicode coercion and implicit # Unicode to string conversion. encoding = "undefined" if encoding != "utf-8": # 요기! # On Non-Unicode builds this will raise an AttributeError... sys.setdefaultencoding(encoding) # Needs Python Unicode build !
같은 디렉토리의 ntpath.py를 열어 87번째 라인의
p_path
를p_path.encode('utf-8')
로 치환해준다..... elif p_drive and p_drive != result_drive: if p_drive.lower() != result_drive.lower(): # Different drives => ignore the first path entirely result_drive = p_drive result_path = p_path continue # Same drive in different case result_drive = p_drive # Second path is relative to the first if result_path and result_path[-1] not in '\\/': result_path = result_path + '\\' result_path = result_path + p_path.encode('utf-8') # 요기! ## add separator between UNC and non-absolute path if (result_path and result_path[0] not in '\\/' and result_drive and result_drive[-1:] != ':'): return result_drive + sep + result_path return result_drive + result_pat
이제 잘 될것이다!
'IT기술 관련 > 파이썬_루비 등 언어' 카테고리의 다른 글
python - pxssh를 이용한 ssh connect & send command (0) | 2016.09.12 |
---|---|
구글 트렌드 파이썬 api (1) | 2016.04.25 |
python pip 설치 (0) | 2016.04.25 |
[Python] 파이썬 악성코드 (0) | 2015.12.09 |
[Python] Python (*.py)를 exe화 하기 (0) | 2015.12.09 |