Summary
1. 문제 상황
- 라이브러리 설치 시 UnicodeDecodeError가 발생했을 때 문제를 해결하는 내용이다.
2. 해결 방안
- pip를 활용하지 않고 직접 설치 파일을 다운로드 받는다
- 문제가 발생한 파일(setup.py)을 수정한다
- python (파일명) install 명령어를 통해 설치한다.
3. 특징
- 이 글은 ko-sentence-transformers 설치 시 발생한 오류를 중점으로 다루고 있으나, 동일한 문제의 다른 라이브러리에서도 이 방법을 활용할 수 있다.
4. 추가 내용
- 이 글은 Windows OS에서 tar.gz 파일의 압축을 해제하는 방법도 포함되어 있다. (필자의 OS는 Windows 11이다.)
Contents
Background
KoBERT를 사용하기 위해 pip로 ko-sentence-transformers 라이브러리를 설치하는 중 오류가 발생하였다.
내가 사용한 명령어는 아래와 같다.
pip install ko-sentence-transformers
Collecting ko-sentence-transformers 라는 문구가 뜨고 설치가 잘 되는 듯 하더니 붉은 색 배경의 오류가 발생하였다.
오류 메시지에는 많은 힌트들이 숨어있으니 이 녀석들을 하나씩 살펴보며 차근차근 해결해본다.
Collecting ko-sentence-transformers
Using cached ko_sentence_transformers-0.3.tar.gz (11 kB)
Preparing metadata (setup.py): started
Preparing metadata (setup.py): finished with status 'error'
error: subprocess-exited-with-error
python setup.py egg_info did not run successfully.
exit code: 1
[6 lines of output]
Traceback (most recent call last):
File "<string>", line 2, in <module>
File "<pip-setuptools-caller>", line 34, in <module>
File "C:\Users\etoil\AppData\Local\Temp\pip-install-lakcq9qe\ko-sentence-transformers_f8c9ce5596be47ce81dffcdb0c9f878e\setup.py", line 6, in <module>
long_description = f.read()
UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 30: illegal multibyte sequence
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
Encountered error while generating package metadata.
See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
위 오류 메시지에서 힌트들을 도출해보자.
1. 맨 아래 note를 보면 이 문제는 pip의 문제가 아닌 설치 중인 package의 문제임을 알 수 있다.
2. 위에서 두 번째 문장을 보면 setup.py의 egg_info가 성공적으로 작동하지 않았다고 한다.
3. 라이브러리 설치 과정에서 f.read() 메소드를 실행할 때 'cp949' 코덱이 디코딩되지 않아 발생한 문제이다.
이 외에도 여러 힌트들이 있지만 이걸로도 충분하다. 문제 해결 방안을 정리하러 가보자.
Solution
발견한 힌트를 조합해서 해결방안을 정리해보자.
현재 setup.py 파일의 f.read() 메소드가 파일을 불러올 때 디코딩 문제가 발생하는 것 같으니, 설치파일을 받아서 setup 파일을 수정한 후 설치를 진행하면 해결할 수 있다. 이 때는 pip로 설치하는 것이 아니라 파일을 설치 받아서 setup.py를 수정하여야 한다.
1. ko-sentence-transformers 설치 파일(tar.gz)을 다운로드한다.
https://pypi.org/project/ko-sentence-transformers/#files
ko-sentence-transformers
pypi.org
2. tar.gz 파일의 압축을 해제한다.
Windows OS기준 cmd에서 tar.gz 파일 압축 해제 메소드를 제공한다.
아래와 같이 'tar -zxvf 파일명'을 입력한 후 Enter를 치면 압축이 해제된다.
tar -zxvf ko_sentence_transformers-0.3.tar.gz
3. 아래와 같이 압축파일이 생성되면 코드가 있는 폴더로 이동해준다.
4. 폴더 내에 있는 setup.py에서 open() 메소드 내 encoding 파라미터를 추가한다. ( encoding='utf-8')
- 변경 전
with open("README.md", "r") as f:
long_description = f.read()
- 변경 후
with open("README.md", "r", encoding='utf-8') as f:
long_description = f.read()
5. 변경한 setup.py 파일을 저장해준 후 해당 폴더 내에서 'python setup.py install'을 해 주면 완료!
에러 없이 ko-sentence-transformers가 import 되는 것을 살펴볼 수 있다.
Caution
주의해야 할 사항은 설치 파일을 옮길 때 setup.py 파일만 옮기는 것이 아니라 폴더 전체를 옮겨야 한다. (설치 과정에서 README.md 파일 등 사용됨)
Conclusion
이 글은 ko-sentence-transformers 라이브러리에 국한되어 설명했지만, 다른 라이브러리에서 동일한 오류가 발생할 때에도 이 흐름대로 진행하면 오류를 해결할 수 있다.
라이브러리 설치 시 아래 세 문장이 나오면 오늘의 흐름을 기억해서 잘 해결해보도록 하자.
1. python setup.py egg_info did not run successfully.
2. UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 30: illegal multibyte sequence
[end of output]
3. note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed
그럼 진짜로 끝.

References
[1] ko-sentence-transformers 설치 파일: https://pypi.org/project/ko-sentence-transformers/#files
[2] [오류 해결] pip install <패키지> 설치 시 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 2082: illegal multibyte sequence" 에러가 발생하는 경우: https://doitgrow.com/32
[3] 윈도우 10 에서 tar 파일 압축/해제 하기: https://klkl0.tistory.com/128
'Developer > AI' 카테고리의 다른 글
[Package][오류] scikit-learn의 compute_class_weight() 사용 시 발생하는 TypeError 해결 (부제: 인자 3개인데 왜 자꾸 1개만 넣으라 그래요?) (0) | 2023.04.28 |
---|