Developer/AI

[NLP][오류] ko-sentence-transformers 설치 시 발생하는 UnicodeDecodeError를 해결해보자!

마크 주쿼버그 2023. 4. 24. 18:09

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 라는 문구가 뜨고 설치가 잘 되는 듯 하더니 붉은 색 배경의 오류가 발생하였다.

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

설치한 tar.gz 파일 압축 풀기

 

3. 아래와 같이 압축파일이 생성되면 코드가 있는 폴더로 이동해준다.

ko-sentence-transformers 설치파일

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'을 해 주면 완료!

Jupyter Lab에서 ko-sentence-transformers를 불러온 화면

에러 없이 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