eubinecto / simple-rnns

10 stars 2 forks source link

Konlpy M1 호환성 문제 #1

Closed eubinecto closed 3 years ago

eubinecto commented 3 years ago

Why?


from konlpy.tag import Okt

sent = "테스트할 문장"

def main():
    okt = Okt()
    tokens = okt.morphs(sent)
    print(tokens)

if __name__ == '__main__':
    main()

위 코드를 M1 맥에서 실행을 하면... 오류가 뜬다. pip3 install konlpy는 가능한데.., 막상 사용하려고 하니 실행이 안되네. 다음과 같은 오류를 뱉으면서 실행이 불가능함:

/Users/eubinecto/Desktop/Projects/Toy/simple-rnns/simplernnsenv/bin/python /Users/eubinecto/Desktop/Projects/Toy/simple-rnns/simple_rnns/attention/examples/explore_konlpy.py
Traceback (most recent call last):
  File "/Users/eubinecto/Desktop/Projects/Toy/simple-rnns/simple_rnns/attention/examples/explore_konlpy.py", line 14, in <module>
    main()
  File "/Users/eubinecto/Desktop/Projects/Toy/simple-rnns/simple_rnns/attention/examples/explore_konlpy.py", line 8, in main
    okt = Okt()
  File "/Users/eubinecto/Desktop/Projects/Toy/simple-rnns/simplernnsenv/lib/python3.9/site-packages/konlpy/tag/_okt.py", line 91, in __init__
    jvm.init_jvm(jvmpath, max_heap_size)
  File "/Users/eubinecto/Desktop/Projects/Toy/simple-rnns/simplernnsenv/lib/python3.9/site-packages/konlpy/jvm.py", line 64, in init_jvm
    jpype.startJVM(jvmpath, '-Djava.class.path=%s' % classpath,
  File "/Users/eubinecto/Desktop/Projects/Toy/simple-rnns/simplernnsenv/lib/python3.9/site-packages/jpype/_core.py", line 226, in startJVM
    _jpype.startup(jvmpath, tuple(args),
OSError: [Errno 0] JVM DLL not found: /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/lib/jli/libjli.dylib

What?

저 코드를 어떻게든 M1 맥에서 돌아가도록 만드는 것이 목표다.

How?

konlpy는 백엔드가 자바다. 자바관련 문제인 것 같은데.. 저걸 해결하면 되지 않을까?

eubinecto commented 3 years ago

이미 해결한 사람이 있네?

zulu jdk를 설치하면 된다고 함. 홈페이지를 가보니, arm64 아키텍쳐를 지원하는 버전이 존재함. 뭐.. 일단 이걸 설치해보자!

eubinecto commented 3 years ago

더 좋은 방법을 찾았다.

그냥 환경변수 설정 같은걸 하는 것보단, M1과 호환되는 jdk 설치 후, Tag객체를 만들 때 jvmpath를 해당 jdk path로 넣어주는 것도 나쁘지 않은듯.

from os import environ
from konlpy.tag import Okt
# zulu - macOS/arm64/version15 설치 이후.
# 해당 path를 지정.
JVM_PATH = '/Library/Java/JavaVirtualMachines/zulu-15.jdk/Contents/Home/bin/java'

def main():
    okt = Okt(jvmpath=JVM_PATH)
    tokens = okt.morphs("으아아아 M1 사용하기 피곤하네")
    print(tokens)

if __name__ == '__main__':
    main()
eubinecto commented 3 years ago

konlpy의 관련된 이슈 스레드에 내 해결방법도 추가했다.. 일단 문제는 해결한 것 같으니.. 이슈는 클로징!