gensim 설치 혹은 import 오류 해결기 (잘 체크하기!)
Word2Vec 모델을 사용하기 위해 pip install gensim을 해야만 했다.
다양한 에러를 만났는데, 해결하는 법을 알아보자.
현재 최신 gensim은 4.X대 버전이다.
그러나 ko.bin을 이용하려면 3.X대 버전을 이용해야 한다는 글을 보고,
gensim 3.4.0을 설치했다.
pip uninstall gensim
pip install gensim==3.4.0
그러나 이렇게 install gensim을 하면서 정말 제각각인 에러를 보았고
제각각으로 해결했다.
해결 기록을 여기 남기겠다.
✨ 에러1 : 나도 모르게 서로 다른 가상환경에 설치해버림
- cmd에서 활성화된 python 경로
- 가상환경의 python 경로
둘이 일치하는지 다시 한번 확인하자.
만약 cmd에서 pip install 할 거면 가상환경이 활성화되어있는지 제대로 확인해야 한다.
나는 에러해결 중 원래 애용하던 가상환경 말고 Window 기본 python 경로로 가상환경을 설정했다.
그래서 cmd에서도 애용하던 가상환경을 deactivate하고 사용하면 Window 기본 python 경로를 사용할 줄 알았다.
그런데 아니다. 난 내가 예상하던 파이썬 환경이 아니라, miniconda3를 사용하고 있었다.
이런 꼼꼼하지 않은 실수 하지 말고, "난 분명 cmd에서 잘 설치했는데 안되네.." 라는 생각이 든다면
가상환경의 불일치 여부를 꼭 확인해보자.
✨ 에러2 : gensim 문제가 아니라 numpy 문제
이렇게 뜬다면 gensim 문제가 아니고 numpy 버전 문제다.
결론적으로 numpy 1.24.4를 설치하니까 해결이 되었다.
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.
위 에러로그에서 좀 더 스크롤을 올려보면
Python version과 numpy version 관련 안내가 뜬다.
내 Python version은 3.8.17이고 numpy version은 1.25.2이다.
저런 에러가 뜨는 상황에서
직접 import numpy as np 자체를 해보면 동일한 안내가 뜬다.
IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.
We have compiled some common reasons and troubleshooting tips at:
https://numpy.org/devdocs/user/troubleshooting-importerror.html
Please note and check the following:
* The Python version is: Python3.8 from "C:\Users\kye33\miniconda3\python.exe"
* The NumPy version is: "1.25.2"
and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.
그래서 pip uninstall numpy 후에 pip install numpy해봤는데,
1.25.2가 지워지고
1.24.4가 설치되었다.
그리고 cmd에서 import numpy as np를 다시 진행해보자.
이제는 위와 같은 에러가 뜨지 않고 numpy가 정상적으로 import 되었다.
그럼 다시 이 환경에서 pip install gensim==3.4.0을 해볼까?
오 나 성공했네!!
.
.
참고: pipdeptree로 버전 호환 정보를 확인해보았다.
그런데 numpy 1.11.3 이상이면 된다고 써있으면서도 내 이전 numpy 1.25.2에서 돌아가지 않았다.
scipy에도 의존성을 가지고 있는데, scipy의 numpy 조건에도 부합하는데!?
음 내 numpy가 다른 라이브러리의 무언가가 삐끗한건지, numpy를 뭔가 잘못 설치했는지는 모르겠지만, 깔끔하게 numpy uninstall 후 install하니까 해결되었다.
gensim와 numpy 등의 버전 호환성은 아래 참고!
✨ 에러3 : collections에 Mapping이 없다고 하네?
ImportError: cannot import name 'Mapping' from 'collections'
만약 python 3.8을 사용중이라면 뜨지 않을 문제고,
그러나 python 3.10을 사용중이라면 만나는 문제다.
에러 로그는 다음과 같다.
File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\gensim\corpora\dictionary.py:12
8 """This module implements the concept of Dictionary -- a mapping between words and their integer ids."""
...
---> 12 from collections import Mapping, defaultdict
13 import sys
14 import logging
ImportError: cannot import name 'Mapping' from 'collections' (C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.3056.0_x64__qbz5n2kfra8p0\lib\collections\__init__.py)
python 3.10에서 발생하는 문제다.
사실 이 문제 자체는 gensim에서 사용하는 import 부분을 바꿔주면 되는 문제다.
lib/site-packages/gensim/corpora/dictionary.py 경로에서 아래와 같이 수정하면 된다.
-> 전
from collections import Mapping, defaultdict
-> 후
from collections.abc import Mapping
from collections import defaultdict
아마 gensim 3.4.0은 python 3.8을 기준으로 작성되었나보다.
그러니까 python 3.8 환경에서 사용하든, gensim의 import 구문을 수정하든 하면 될 것 같다.
나는 python 3.8환경에서 사용하겠다.
주의! jupyter를 사용한다면, python kernel이 아니라 jupyter kernel를 3.8로 잘 선택하자. 혼동하지 말자는 말이다.
* 그런데 윈도우의 AppData 디렉토리 하위에 설치된 python 환경을 사용할 때 dictionary.py에 vscode상으로 접근할 수 없는 것을 발견했다. (관리자 권한으로 vscode를 열었음에도!)
아무튼 언급하는 것은 발견했다는 정보를 기록하려는 목적이다. 나는 AppData 하위 환경을 사용하지는 않아서 찾아보지는 않겠다.
✨ 에러4 : 링커 오류
build\temp.win-amd64-cpython-310\Release\gensim/corpora\_mmreader.cp310-win_amd64.lib 라이브러리 및 build\temp.win-amd64-cpython-310\Release\gensim/corpora\_mmreader.cp310-win_amd64.exp 개체를 생성하고 있습니다.
_mmreader.obj : error LNK2001: 확인할 수 없는 외부 기호 _PyGen_Send
build\lib.win-amd64-cpython-310\gensim\corpora\_mmreader.cp310-win_amd64.pyd : fatal error LNK1120: 1개의 확 인할 수 없는 외부 참조입니다.
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x64\\link.exe' failed with exit code 1120
어.. 사실 이 링커 오류를 초반에 만났는데 어느 순간 사라져서 찾을 수 없게 되었다.
아..! 생각 나는 것 같기도..? (아닐수도..?)
gensim.tar 파일을 직접 압축풀어서 pip install 성공한 사람이 있길래, 초반에 나도 tar을 직접 내려받아 압축풀어서 pip setup.py install을 진행했다.
그런데 위와 같은 링커 오류가 뜬 것 같다.
그런데 직접 내려받은 tar을 삭제하고, 에러 1, 2, 3을 깔끔히 해결할 수 있게 되어서
이 링커 오류는 미궁속에 빠져있도록 두겠다.
그래도 이 에러 당시에 솔루션을 찾아나서본 결과,
여러 사람들이 링커 오류가 꽤 까다로운 에러라고 말씀하시는 것 같다.
(당시에 MS Visual Studio 2019 도구들을 새로 설치해보는 시도는 했었다. 한번에 해결 안되길래 바로 접었지만!)
모든 생각이 깔끔해져버렸다.. 해결 완료!
이제 gensim을 사용 가능하며
아래와 같은 코드를 돌릴 수 있다.
from gensim.models import Word2Vec
model = Word2Vec.load('ko.bin')
vector = model.wv.most_similar("행복")
print(vector)
output : [('사랑', 0.6759077310562134), ('기쁨', 0.6493781805038452), ('즐거움', 0.6396492719650269), ('삶', 0.6299898028373718), ('젊음', 0.6187379360198975), ('즐겁', 0.6027448177337646), ('인생', 0.6002243161201477), ('존엄', 0.5952589511871338), ('고독', 0.5938762426376343), ('불행', 0.5894461870193481)]
행복이라는 단어와 유사한 단어들이 나온다.
사랑.. 기쁨.. 즐거움.. 삶.. 젊음.. 즐겁.. 인생.. 존엄...
읽기만 해도 지금 나를 더 행복하게 만드는 느낌.... ㅋㅋㅋㅋㅋ
오늘 원래 문단인식 기술 업그레이드까지 완료하려고 했는데,
gensim 문제를 포스팅하느라 밤이 늦었다.
사담이지만 꽤 기분이 좋은 순간이 있다.
에러를 해결할 때 예전에는 검색에 크게 의존했다.
어느 순간에는 검색에 크게 의존하지 않고 원인을 유추해 해결하는 상황이 점점 많아지는 것 같다.
문득 짚어보면 그런 상황들은 어디선가 무언가의 이해도가 커졌다는 의미다.
그리고 오늘 또 기분 좋은 순간이 있었다. 모르는 분께 간접 칭찬을 들은 일이다. 똑똑한 것 같다는 말을 들었다. 너무 할 게 많고 이것저것 부족하다고 생각하던 중에 이렇게 과분한 칭찬을 들으니까 그 갭을 빨리 채우고 싶은 의지가 많이 생긴다... (실상은 하나도 안 똑똑하고 생각도 꽤 느린데 좋게 봐주셔서 감사합니다) 프로젝트하면서 기분 좋은 소식 전해주고 좋은 말 해주는 & 밤낮 되돌리라는 말에 돌려돌려돌림판이라고 대답하는 귀요미와의 카톡을 첨부하며 & 다시 한번 진심으로 감사드리면서 끗!