Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TypeError : Package kr.lucypark.tkt.TktInterface is not Callable 에러 #81

Open
jisulee42 opened this issue Nov 1, 2015 · 18 comments
Open

Comments

@jisulee42
Copy link

jisulee42 commented Nov 1, 2015

image

konlpy 를 이용하여 만든 프로그램을 exe화 하기위해 py2exe 를 사용하여 만들었는데 제목과 같은 오류가 발생합니다...... 혹시 해결방법이 있을까요 ?

@bongster
Copy link

저도 똑같은 에러가 발생하는데, 이 이슈 해결 되었나요?

TypeError: Package kr.lucypark.tkt.TktInterface is not Callable

konlpy 버전은 0.4.4 를 사용하고 있습니다.

@bongster
Copy link

자답 하겠습니다.

저희 jvm 자바 세팅이 잘못 되어 있어서 konlpy가 못 찾는 문제였습니다.

환경변수에 JAVA_HOME 세팅해주고,

jvm 설정해주는 함수를 jvm.init_jvm() 변경 해주니, 제대로 되네요.

@sonsoyoung
Copy link

저도 같은 에러가 발생하는데,
jvm 설정해주는 함수를 jvm.init_jvm()로 어떻게 바꾸나요??

@bongster
Copy link

@sonsoyoung
쟤 샘플 코드 추가하였습니다. 답장 늦어서 죄송합니다.

# encoding: utf-8
import csv
import logging

from konlpy import jvm
from konlpy.tag import Twitter

logger = logging.getLogger(__name__)


def main():
    """
        konlpy 사용시 주의 사항
        자바 설치 및 세팅 필요
        JAVA_HOME 세팅이 필요합니다.
        export JAVA_HOME=$(/usr/libexec/java_home)
    """
    konl = Twitter()
    file_path = '/Users/bongster/Downloads/20160528_jiana.csv'
    with open(file_path, 'rb') as csv_file:
        inforeader = csv.reader(csv_file)
        for row in inforeader:
            r = konl.pos(unicode(row[4], 'utf-8'), norm=True, stem=True)
            print '=' * 20
            for txt, post in r:
                print txt, post
            print '=' * 20


if __name__ == '__main__':
    jvm.init_jvm()
    main()

@e9t
Copy link
Member

e9t commented Nov 14, 2016

지금 konlpy는 jvm이 실행중이지 않은 경우에만 init_jvm()을 실행하고 있는데, 어떠한 이유로 jpype.isJVMStarted()True인 경우 해당 문제가 발생하는 것 같습니다. JVM을 실행하는 다른 프로세스가 이미 존재하고 있던 것일수도 있고, 다른 이유 때문일수도 있을 것 같네요.

원인과 해결방법이 명확하지 않으니 이 이슈는 당분간 모니터링 하도록 하겠습니다. 혹시 같은 문제를 겪고 계신 분이 있다면 제보 부탁드립니다.

이 이슈는 #57 과 중복이며, #66 와도 같은 원인에서 발생된 것으로 추측됩니다.

@namjals
Copy link

namjals commented Mar 2, 2017

저도 PyInstaller로 배포파일 생성 후 실행하면 같은 문제가 발생합니다.
win10 x64, jdk1.8.0_121이고 다음의 코드는 배포파일로 만들어도 문제없이 돌아갑니다.
startJVM(getDefaultJVMPath(), "-ea")
java.lang.System.out.println("hello world")
shutdownJVM()
bongster님 말씀처럼 Twitter() 인스턴스 생성 전에 미리 jvm.init_jvm()를 해도 마찬가지입니다.
스크립트 실행 시에는 문제 되지 않습니다. 배포파일에서 생기는 문제입니다.

@DataSoccer
Copy link

DataSoccer commented Mar 15, 2017

저는 맥(요세미티)에서 자바8 사용하고 있는데 . 아래 부분부터 에러가 나네요..
---> 18 pos_tagger = Twitter()
TypeError: Package kr.lucypark.tkt.TktInterface is not Callable

@usryokousha
Copy link

저는 설치한 파일을 다시 보니 Anaconda3인 경우 JPype1-py3를 설치해야 된대요. 아마 오류가 발생하는 원인이 그런 거예요..

@irblsensitivity
Copy link

@bongster
저도 py2exe로 실행파일을 생성했더니, 생성된 프로그램을 실행하면
TypeError: Package kr.lucypark.tkt.TktInterface is not Callable
에러가 발생해서 @bongster 님 방식대로 jvm 설정을 해보았는데 해결되지는 않네요.

혹시 실행 환경을 좀 알려주실수 있나요?

지금 저는
Windows 10 Education Edition
Java 1.8.0_131
Python2.7 x64
JPype1 0.6.2
를 이용해서 하고 있습니다.

@bongster
Copy link

@irblsensitivity 저는 MAC 에서 진행을 했습니다. python2.7.6 version이고 java는 1.8을 사용했습니다.

@bongster
Copy link

@irblsensitivity 쟤가 맥으로 테스트 했을 때도 잘 나오네요.

  • ENV:

    • python 2.7.13
    • java version "1.8.0_131"
  • CODE:

# encoding: utf-8
import csv
import logging

from konlpy import jvm
from konlpy.tag import Twitter

logger = logging.getLogger(__name__)


def main():
    """
        konlpy 사용시 주의 사항
        자바 설치 및 세팅 필요
        JAVA_HOME 세팅이 필요합니다.
        export JAVA_HOME=$(/usr/libexec/java_home)
    """
    konl = Twitter()
    test_string = [
        u'konlpy 사용시 주의 사항',
        u'자바 설치 및 세팅 필요',
        u'JAVA_HOME 세팅이 필요합니다.',
        u'export JAVA_HOME=$(/usr/libexec/java_home)',
    ]
    for row in test_string:
        r = konl.pos(row, norm=True, stem=True)
        print '=' * 20
        for txt, post in r:
            print txt, post
        print '=' * 20


if __name__ == '__main__':
    jvm.init_jvm()
    main()%
  • RESULT:
====================
konlpy Alpha
사용 Noun
시 Noun
주의 Noun
사항 Noun
====================
====================
자바 Noun
설치 Noun
및 Noun
세팅 Noun
필요 Noun
====================
====================
JAVA Alpha
_ Punctuation
HOME Alpha
세팅 Noun
이 Josa
필요하다 Adjective
. Punctuation
====================
====================
export Alpha
JAVA Alpha
_ Punctuation
HOME Alpha
=$(/ Punctuation
usr Alpha
/ Punctuation
libexec Alpha
/ Punctuation
java Alpha
_ Punctuation
home Alpha
) Punctuation
====================

@ailuropoda0
Copy link

ailuropoda0 commented Jun 23, 2017

저도 Kkma(), Twitter(), Hannanum() 클래스를 호출하면
TypeError: Package kr.lucypark.kkma.KkmaInterface is not Callable
TypeError: Package kr.lucypark.tkt.TktInterface is not Callable
TypeError: Package kr.lucypark.jhannanum.comm.HannanumInterface is not Callable
에러가 뜹니다.

jvm.init_jvm() 설정을 해보아도 해결되지 않습니다.

제 실행환경은
Windows 8.1
Java 1.8.0_131(32 bit)
Python 3.6(32bit)
KoNLPy 0.4.4
JPype1 0.6.2(32bit)
인데

전에는 잘 작동하다가, SSD로 교체하면서 설정이 바뀌었는지 에러가 발생하네요.

@hoonse9364
Copy link

exe 상에서 실행시 jpype 로 넘어가는 classpath 를
출력해보니 실제 konlpy 모듈이 설치된 바이너리 경로와 다른 곳이 찍히더군요...

  1. utils.py 스크립트의 installpath 값을 기존의 os.dirname(file) 에서 '파이썬설치경로\lib\site-packages\konlpy\bin' (bin 까지 줬었는지 konlpy 까지만 줬는지 정확히 기억은 나지 않습니다만...)으로 직접설정하도록 변경하고
  2. _kkma.py 스크립트에서 인스턴스 생성시 실행되는if not isJVMstarted(): init_jvm 라인을 지우고
  3. JVM 관련 제어를 kkma 인스턴스를 생성하는 스크립트에서 직접 하도록 하니 exe 로 빌드도 잘 되었고 exe 실행시 실행도 잘 되었습니다.

임시 방편적인 해결책이지만 이렇게하면 빌드된 exe 로도 스크립트에서처럼 잘 실행됩니다.

제 환경은 아래와같고 모든 설치 경로는 디폴트 경로입니다.
Windows 10
Java 1.8.0_131
Python2.7 x64
JPype1 0.6.2

@songsb13
Copy link

Pyinstaller 를 사용하신다면

spec 파일의 datas에 파일을 추가해보세요!

datas=[("파이썬경로/Python35-32/Lib/site-packages/konlpy/", "./konlpy"), ("파이썬경로/Python35-32/Lib/site-packages/konlpy/java/", "./konlpy/java"), ("파이썬경로/Python35-32/Lib/site-packages/konlpy/data/tagset/*", "./konlpy/data/tagset"),],

이걸로 해결했습니다.

@itziana
Copy link

itziana commented Apr 16, 2018

@songsb13
안녕하세요 저도 같은 오류가 발생하고 있는데,

image

말씀하신 스펙 파일이라는게 어디에있는 파일인지 알고싶습니다
파이썬 경로중에 Python35-32요런 폴더도 없어서 ㅠ

저는 윈도우 10에서 파이썬 3.65를 쓰고 있습니다

@songsb13
Copy link

@itziana
spec파일은 pyinstaller로 제작시에 만들어지는 파일입니다.

스크립트와 같은폴더에 스크립트명.spec 이없나요?

@chlgudrbdn
Copy link

잘은 모르겠지만 다른 형태소분석기를 받아온 상태에서, 다른 형태소 분석기를 쓰면 충돌하는게 아닐까 생각 됩니다. 물론 저는 라이노랑 병행해서 쓰다가 겹치면서 생긴 일이긴 하지만.

@yti1993
Copy link

yti1993 commented Nov 4, 2021

Pyinstaller 를 사용하신다면

spec 파일의 datas에 파일을 추가해보세요!

datas=[("파이썬경로/Python35-32/Lib/site-packages/konlpy/", "./konlpy"), ("파이썬경로/Python35-32/Lib/site-packages/konlpy/java/", "./konlpy/java"), ("파이썬경로/Python35-32/Lib/site-packages/konlpy/data/tagset/*", "./konlpy/data/tagset"),],

이걸로 해결했습니다.

오우 이 방법으로 spec파일 수정하여 pyinstaller로 빌드하니 해결했습니다!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests