jonghwanhyeon/python-mecab-ko

Docker 내의 Anaconda 환경에서 설치가 되지 않고 있습니다.

CODEJIN opened this issue · 5 comments

Docker 안에서 conda를 이용하여 가상환경을 구축하여 사용하고 있습니다만, 설치가 되지 않는 것을 확인하였습니다.
메시지를 추적한 결과

  building '_mecab' extension
  error: [Errno 2] No such file or directory: '/opt/conda/bin/mecab-config': '/opt/conda/bin/mecab-config'
error
  ERROR: Failed building wheel for python-mecab-ko

부터 오류가 발생하는 것으로 보입니다. 해결 방안을 알려주신다면 감사드리겠습니다.

Ubuntu 20.04에서도 동일한 에러가 발생하고 있습니다 - mecab-config를 못 찾네요. Ubuntu 뿐만 아니라 AWS EC2 Instance에서도 동일한 문제가 발생하는 것으로 보아 Linux 환경 전체에서 문제가 발생하고 있는 듯 합니다.

running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.7
creating build/lib.linux-x86_64-3.7/mecab
copying mecab/__init__.py -> build/lib.linux-x86_64-3.7/mecab
copying mecab/mecab.py -> build/lib.linux-x86_64-3.7/mecab
running build_ext
creating tmp
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fdebug-prefix-map=/build/python3.7-7jazGd/python3.7-3.7.11=. -fstack-protector-strong -Wformat -Werror=format-security -g -fdebug-prefix-map=/build/python3.7-7jazGd/python3.7-3.7.11=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/home/djlee/workspace/python/python-mecab-ko/.venv/include -I/usr/include/python3.7m -c /tmp/tmpmegt_jy_.cpp -o tmp/tmpmegt_jy_.o -std=c++14
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fdebug-prefix-map=/build/python3.7-7jazGd/python3.7-3.7.11=. -fstack-protector-strong -Wformat -Werror=format-security -g -fdebug-prefix-map=/build/python3.7-7jazGd/python3.7-3.7.11=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/home/djlee/workspace/python/python-mecab-ko/.venv/include -I/usr/include/python3.7m -c /tmp/tmpsjm01nhn.cpp -o tmp/tmpsjm01nhn.o -fvisibility=hidden
building '_mecab' extension
**error: [Errno 2] No such file or directory: '/home/djlee/workspace/python/python-mecab-ko/.venv/bin/mecab-config': '/home/djlee/workspace/python/python-mecab-ko/.venv/bin/mecab-config'**
Building wheel for python-mecab-ko (setup.py) ... error
ERROR: Failed building wheel for python-mecab-ko

코드를 열어 본 결과, commit 4fa89bc에서 추가된 virtualenv 관련 기능이 Linux 환경에서 제대로 동작하지 않고 있는 것 같습니다. 아래 부분인데요, build_ext 단계에서 {virtualenv}/bin 아래 mecab-config 바이너리가 생성되지 않아서 다음 단계인 '_mecab' extension 빌드 단계에서 에러가 발생하는 듯 합니다. (작업자 분께서 OSX에서 작업+테스트 하신 것 같은데요, 맞는지요?)

mecab_config_path = os.path.join(sys.prefix, 'bin', 'mecab-config')

반면 1.0.9에서는 문제 없이 동작하네요. 일단은 저도 1.0.9를 사용중입니다만 어서 패치되었으면 합니다.

cc/ @jonghwanhyeon @@woowahan-jaehoon

Ubuntu 20.04에서도 동일한 에러가 발생하고 있습니다 - mecab-config를 못 찾네요. Ubuntu 뿐만 아니라 AWS EC2 Instance에서도 동일한 문제가 발생하는 것으로 보아 Linux 환경 전체에서 문제가 발생하고 있는 듯 합니다.

running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.7
creating build/lib.linux-x86_64-3.7/mecab
copying mecab/__init__.py -> build/lib.linux-x86_64-3.7/mecab
copying mecab/mecab.py -> build/lib.linux-x86_64-3.7/mecab
running build_ext
creating tmp
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fdebug-prefix-map=/build/python3.7-7jazGd/python3.7-3.7.11=. -fstack-protector-strong -Wformat -Werror=format-security -g -fdebug-prefix-map=/build/python3.7-7jazGd/python3.7-3.7.11=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/home/djlee/workspace/python/python-mecab-ko/.venv/include -I/usr/include/python3.7m -c /tmp/tmpmegt_jy_.cpp -o tmp/tmpmegt_jy_.o -std=c++14
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fdebug-prefix-map=/build/python3.7-7jazGd/python3.7-3.7.11=. -fstack-protector-strong -Wformat -Werror=format-security -g -fdebug-prefix-map=/build/python3.7-7jazGd/python3.7-3.7.11=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/home/djlee/workspace/python/python-mecab-ko/.venv/include -I/usr/include/python3.7m -c /tmp/tmpsjm01nhn.cpp -o tmp/tmpsjm01nhn.o -fvisibility=hidden
building '_mecab' extension
**error: [Errno 2] No such file or directory: '/home/djlee/workspace/python/python-mecab-ko/.venv/bin/mecab-config': '/home/djlee/workspace/python/python-mecab-ko/.venv/bin/mecab-config'**
Building wheel for python-mecab-ko (setup.py) ... error
ERROR: Failed building wheel for python-mecab-ko

코드를 열어 본 결과, commit 4fa89bc에서 추가된 virtualenv 관련 기능이 Linux 환경에서 제대로 동작하지 않고 있는 것 같습니다. 아래 부분인데요, build_ext 단계에서 {virtualenv}/bin 아래 mecab-config 바이너리가 생성되지 않아서 다음 단계인 '_mecab' extension 빌드 단계에서 에러가 발생하는 듯 합니다. (작업자 분께서 OSX에서 작업+테스트 하신 것 같은데요, 맞는지요?)

mecab_config_path = os.path.join(sys.prefix, 'bin', 'mecab-config')

반면 1.0.9에서는 문제 없이 동작하네요. 일단은 저도 1.0.9를 사용중입니다만 어서 패치되었으면 합니다.

cc/ @jonghwanhyeon @@woowahan-jaehoon

최근에 해당 부분이 문제가 되는 것을 확인을 했습니다.

원래는 원작자분이, mecab이 이미 시스템에 설치되어있으면 시스템의 것을 이용하고
시스템에 mecab이 설치되지 않으면 소스를 받아서 빌드하도록 하셨던 것일텐데,
해당 패치를 할 당시에는 후자의 경우만 고려해서 패치하다보니 그렇게 되었습니다.

안녕하세요!

@woowahan-jaehoon 님이 보내주신 Pull Request 반영하여 PyPI에 업로드 해놓도록 하겠습니다.
해당 버전으로 확인 부탁드리겠습니다!

빌드 문제는 해결되었는데요, 이번엔 AssertionError가 발생하네요.

>>> import mecab
>>> m = mecab.MeCab()
>>> m.parse('학생부종합전형으로는 수시모집 선발인원의 약 58%인 1173명을 선발한다.')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/djlee/workspace/python/mecab-ko-dic/.venv/lib/python3.7/site-packages/mecab/mecab.py", line 62, in parse
    for node in lattice
  File "/home/djlee/workspace/python/mecab-ko-dic/.venv/lib/python3.7/site-packages/mecab/mecab.py", line 62, in <listcomp>
    for node in lattice
  File "/home/djlee/workspace/python/mecab-ko-dic/.venv/lib/python3.7/site-packages/mecab/mecab.py", line 33, in _extract_feature
    assert len(values) == 8
AssertionError

빌드 문제는 해결되었는데요, 이번엔 AssertionError가 발생하네요.

>>> import mecab
>>> m = mecab.MeCab()
>>> m.parse('학생부종합전형으로는 수시모집 선발인원의 약 58%인 1173명을 선발한다.')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/djlee/workspace/python/mecab-ko-dic/.venv/lib/python3.7/site-packages/mecab/mecab.py", line 62, in parse
    for node in lattice
  File "/home/djlee/workspace/python/mecab-ko-dic/.venv/lib/python3.7/site-packages/mecab/mecab.py", line 62, in <listcomp>
    for node in lattice
  File "/home/djlee/workspace/python/mecab-ko-dic/.venv/lib/python3.7/site-packages/mecab/mecab.py", line 33, in _extract_feature
    assert len(values) == 8
AssertionError

이 이슈와는 분리하는 것이 좋을 것 같습니다.
관련해서는 #7 PR 올라와있긴 했습니다.