레이블이 KoNLPY인 게시물을 표시합니다. 모든 게시물 표시
레이블이 KoNLPY인 게시물을 표시합니다. 모든 게시물 표시

2017년 6월 23일 금요일

이미 설치된 Miniconda의 설치 directory 바꾸기

System admin이 Miniconda를 설치했는데, 별 생각없이 설치하여 root user의 home directory에 설치하는 바람에 /root/miniconda3에 설치된 경우 어떻게 해야 할까요 ?

결론부터 말씀드리면, 원하는 directory로 copy한 뒤 ownership을 바꿔주고, 그리고나서 약 100여개의 file들 속의 기존 directory 이름을 바꿔주면 됩니다.

원래의 정답은 아래의 Continuum 홈페이지에 나왔습니다.

https://docs.continuum.io/anaconda/user-guide/tasks/move-directory

클릭하기 귀찮으신 분을 위해 아래에 copy & paste 해드리면 다음과 같습니다.

To move Anaconda from one directory to another:

1. Delete it from the old directory.
2. Go to the new directory and install it there following the Anaconda installation instructions.

즉, 지우고 새로 설치하라는 것입니다.   Anaconda 또는 Miniconda를 한번 설치하고 나면, 그 directory만 새로 옮기는 것은 허용되지 않는다고 합니다.

그러나 Continuum의 그런 정책에 대해서는 많은 불만들이 있을 수 있습니다.  많은 기업들이 보안 등의 문제로 서버를 internet access를 허용하지 않습니다.  따라서 서버를 도입할 때, 먼저 회사 외부의 internet이 자유롭게 access되는 곳에서 OS와 Miniconda를 설치한 뒤,  mecab-python3처럼 Miniconda에는 포함되어 있지 않아 internet에서 download 받아야 하는 python package 등을 다 설치한 뒤 회사에 반입하는 경우가 꽤 많습니다.   그런데 그 설치 directory를 /root/miniconda3에 해버리면 다른 일반 유저들이 conda 명령들을 수행할 때 아래와 같은 error가 나버립니다.

u0017496@sys-87926:~$ /root/miniconda3/bin/conda list
-bash: /root/miniconda3/bin/conda: Permission denied

그래서 /root와 같은 민감한 directory를 피해서, /opt 혹은 /usr/local과 같은 곳으로 이 directory를 copy한 뒤 ownership만 변경해주면 좋겠습니다만, 아래와 같이 그것도 안 됩니다.

먼저 /root/miniconda3를 /usr/local/miniconda3로 copy 하고...

root@sys-87926:~# pwd
/root

root@sys-87926:~# cp -r miniconda3 /usr/local/

ownership을 변경해준 뒤

root@sys-87926:~# chown -R u0017496:u0017496 /usr/local/miniconda3

이제 u0017496 사용자로 login해서 환경 변수를 맞춰주고

u0017496@sys-87926:~$ vi ./.bashrc
...
export PATH=/usr/local/miniconda3/bin:$PATH
export PYTHONPATH=/usr/local/miniconda3/lib/python3.6/site-packages
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-ppc64el

u0017496@sys-87926:~$ . ./.bashrc

u0017496@sys-87926:~$ which conda
/usr/local/miniconda3/bin/conda

간단한 conda 명령을 날려보면 다음과 같이 error가 납니다.

u0017496@sys-87926:~$ conda list
-bash: /usr/local/miniconda3/bin/conda: /root/miniconda3/bin/python: bad interpreter: Permission denied

이는 보시다시피 상당히 많은 file들에 원래의 directory name, 즉 /root/miniconda3이 박혀 있기 때문입니다.  가령 conda라는 명령 자체도 아래와 같이 python script이며, 그 속에 원래 설치 directory의 이름이 박혀 있습니다.

u0017496@sys-87926:~$ vi /usr/local/miniconda3/bin/conda
#!/root/miniconda3/bin/python
if __name__ == '__main__':
    import sys
    import conda.cli

    sys.exit(conda.cli.main())


이에 대해서 아래 URL에 몇몇 user들이 토론을 벌인 바 있습니다.  실은 저 위의 Continuum 홈페이지에 '지우고 새로 설치하라'라고 하는 문서도 아래 github 토론에서 이야기가 나왔다가  Continuum 소속의 개발자가 사람들에게 공표하는 의미로 만든 것입니다.

https://github.com/ContinuumIO/anaconda-issues/issues/270

하지만 꼭 불가능한 것은 아닙니다.  위 github 토론에서도 (결론을 내지는 않았지만) '그냥 그 수많은 file들의 directory name들을 다 바꿔버리면 될 거다'라는 해결책을 제시한 개발자도 있었습니다.

제가 해보니 총 113개의 file만 고치면 되고, 실제로 sed 명령으로 고치면 꽤 쉽게 고칠 수 있으며, 결과적으로 잘 됩니다.

위에서처럼 cp와 chown을 해주고 환경변수 PATH 및 PYTHONPATH도 다 맞춰준 상태에서, 다음과 같이 예전 directory 이름, 즉 /root/miniconda3를 포함하는 text file들을 찾아 list를 만듭니다.  아래에서 find의 -type f는 (directory는 빼고) 파일만 찾으라는 것이고, grep의 -Iq (대문자 아이와 소문자 큐입니다)는 text file이 아닌 것은 즉각 무시하라는 뜻입니다.

u0017496@sys-87926:~$ for i in `find /usr/local/miniconda3 -type f -exec grep -Iq . {} \; -print`
> do
> grep "root\/miniconda3" $i
> if [[ $? -eq 0 ]]
> then
> echo $i >> matchlist.txt
> fi
> done

이 matchlist라는 새로 생성된 파일 속에는 아래처럼 /root/minconda3라는 string을 포함한 text file들의 목록이 들어 있습니다.

u0017496@sys-87926:~$ tail matchlist.txt
/usr/local/miniconda3/bin/idle3.6
/usr/local/miniconda3/bin/route53
/usr/local/miniconda3/bin/python3.6m-config
/usr/local/miniconda3/bin/cq
/usr/local/miniconda3/bin/conda
/usr/local/miniconda3/bin/instance_events
/usr/local/miniconda3/bin/freetype-config
/usr/local/miniconda3/bin/conda-env
/usr/local/miniconda3/bin/launch_instance
/usr/local/miniconda3/include/openssl/opensslconf.h

이제 이 파일들의 *.org(원본 보관용)과 *.new(임시작업용)을 복사해두고

u0017496@sys-87926:~$ for i in `cat matchlist.txt`
> do
> cp $i ${i}.org
> cp $i ${i}.new
> done

아래와 같이 sed 명령으로 "root/miniconda3"를 "usr/local/miniconda3"로 교체하여 임시작업용 *.new에 넣습니다.  그러고 난 뒤 원본을 이 *.new로 바꿔줍니다.

u0017496@sys-87926:~$ for i in `cat matchlist.txt`
> do
> sed 's/root\/miniconda3/usr\/local\/miniconda3/g' $i > ${i}.new
> cp ${i}.new $i
> done

임시작업용 파일들인 *.new는 나중에 삭제하셔도 됩니다.

보시면 아래와 같이 /root/miniconda가 /usr/local/miniconda3로 바뀐 것을 보실 수 있습니다.

u0017496@sys-87926:~$ grep usr\/local /usr/local/miniconda3/bin/pyvenv-3.6
#!/usr/local/miniconda3/bin/python

이제 conda 명령이 제대로 수행되는지 테스트 해보겠습니다.  보시다시피 잘 됩니다.

u0017496@sys-87926:~$ which conda
/usr/local/miniconda3/bin/conda

u0017496@sys-87926:~$ conda list
# packages in environment at /usr/local/miniconda3:
#
asn1crypto                0.22.0                   py36_0
bazel                     0.4.5                         0
boto                      2.47.0                    <pip>
bz2file                   0.98                      <pip>
cffi                      1.10.0                   py36_0
conda                     4.3.18                   py36_0
conda-env                 2.6.0                         0
cryptography              1.8.1                    py36_0
cudatoolkit               8.0                           0
cudnn                     6.0.21                        0
cycler                    0.10.0                   py36_0
freetype                  2.5.5                         2
gensim                    2.0.0                     <pip>
idna                      2.5                      py36_0
Keras                     2.0.4                     <pip>
konlpy                    0.4.4                     <pip>
libffi                    3.2.1                         1
libpng                    1.6.27                        0
libprotobuf               3.2.0                         0
matplotlib                2.0.2               np112py36_0
numpy                     1.13.0                    <pip>
numpy                     1.12.1                   py36_0
openblas                  0.2.19                        0
openssl                   1.0.2k                        2
packaging                 16.8                     py36_0
pip                       9.0.1                    py36_1
protobuf                  3.2.0                    py36_0
pyasn1                    0.2.3                    py36_0
pycosat                   0.6.2                    py36_0
pycparser                 2.17                     py36_0
pyopenssl                 17.0.0                   py36_0
pyparsing                 2.1.4                    py36_0
python                    3.6.1                         2
python-dateutil           2.6.0                    py36_0
pytz                      2017.2                   py36_0
PyYAML                    3.12                      <pip>
requests                  2.14.2                   py36_0
ruamel_yaml               0.11.14                  py36_1
scikit-learn              0.18.1              np112py36_1
scipy                     0.19.0                    <pip>
scipy                     0.19.0              np112py36_0
setuptools                27.2.0                   py36_0
six                       1.10.0                   py36_0
smart-open                1.5.3                     <pip>
sqlite                    3.13.0                        0
tensorflow                1.1.0               np112py36_0
tensorflow-gpu            1.1.0               np112py36_0
Theano                    0.9.0                     <pip>
werkzeug                  0.12.2                   py36_0
wheel                     0.29.0                   py36_0
xz                        5.2.2                         1
yaml                      0.1.6                         0
zlib                      1.2.8                         3


새로 package를 install하는 것도 잘 됩니다.

u0017496@sys-87926:~$ conda install flask
Fetching package metadata .........
Solving package specifications: .

Package plan for installation in environment /usr/local/miniconda3:

The following NEW packages will be INSTALLED:

    click:        6.7-py36_0
    flask:        0.12.2-py36_0
    itsdangerous: 0.24-py36_0
    jinja2:       2.9.6-py36_0
    markupsafe:   0.23-py36_2

Proceed ([y]/n)? y

click-6.7-py36 100% |######################################| Time: 0:00:00   7.96 MB/s
itsdangerous-0 100% |######################################| Time: 0:00:00  13.50 MB/s
markupsafe-0.2 100% |######################################| Time: 0:00:00  19.45 MB/s
jinja2-2.9.6-p 100% |######################################| Time: 0:00:00   8.85 MB/s
flask-0.12.2-p 100% |######################################| Time: 0:00:00   8.55 MB/s


뿐만 아니라, 새로 인터넷에서 download 받아 설치하는 것도 잘 됩니다.  (물론 이건 인터넷이 access되는 환경에서만 가능한 테스트입니다.)

u0017496@sys-87926:~$ pip install Jpype1
Collecting Jpype1
  Downloading JPype1-0.6.2.tar.gz (147kB)
    100% |████████████████████████████████| 153kB 2.8MB/s
Building wheels for collected packages: Jpype1
  Running setup.py bdist_wheel for Jpype1 ... done
  Stored in directory: /home/u0017496/.cache/pip/wheels/8e/f3/e6/a1250b8e8d2bd105f4dd21b1dc801dbcf5d815592443bfe741
Successfully built Jpype1
Installing collected packages: Jpype1
Successfully installed Jpype1-0.6.2


KoNLPy를 python에서 import 해보면 잘 되는 것을 보실 수 있습니다.   (이걸 테스트하시려면 위와 같이 Jpype1가 설치되어 있어야 합니다.)

u0017496@sys-87926:~$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-ppc64el

u0017496@sys-87926:~$ python
Python 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 15:31:35)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from konlpy.tag import *
>>> Kkma()
<konlpy.tag._kkma.Kkma object at 0x3fff97589b38>
>>>

이제 다른 user를 만들어서 이 /usr/local/miniconda를 쓸 수 있는지 보겠습니다.

root@sys-87926:/home/u0017496# adduser newuser

새로 만들어진 newuser로 login 한 뒤, PATH를 맞춰줍니다.

newuser@sys-87926:~$ vi .bashrc
export PATH=/usr/local/miniconda3/bin:$PATH
export PYTHONPATH=/usr/local/miniconda3/lib/python3.6/site-packages
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-ppc64el

newuser@sys-87926:~$ . ./.bashrc

보시다시피 다 잘 됩니다.

newuser@sys-87926:~$ conda list
# packages in environment at /usr/local/miniconda3:
#
asn1crypto                0.22.0                   py36_0
bazel                     0.4.5                         0
boto                      2.47.0                    <pip>
bz2file                   0.98                      <pip>
...
yaml                      0.1.6                         0
zlib                      1.2.8                         3


newuser@sys-87926:~$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-ppc64el
newuser@sys-87926:~$ python
Python 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 15:31:35)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from konlpy.tag import *
>>> Kkma()
<konlpy.tag._kkma.Kkma object at 0x3fffa4e49780>
>>>

/usr/local/miniconda3의 permission이 아래처럼 755로 되어 있으므로, 아래처럼 newuser라는 새로운 사용자는 conda uninstall이나 install 같은 것은 할 수 없습니다.  만약 다른 사용자들도 자유롭게 install/uninstall을 하기를 원하신다면 그에 맞춰 permission을 조정해주셔야 합니다.  그러나 되도록 그러지 않는 편이 낫겠지요.

u0017496@sys-87926:~$ ls -la /usr/local/miniconda3
total 76
drwxr-xr-x  11 u0017496 u0017496  4096 Jun 23 02:55 .
drwxr-xr-x  13 root     root      4096 Jun 22 22:35 ..
drwxr-xr-x   2 u0017496 u0017496  4096 Jun 23 02:20 bin
drwxr-xr-x   2 u0017496 u0017496 12288 Jun 23 02:55 conda-meta
drwxr-xr-x   3 u0017496 u0017496  4096 Jun 23 02:21 envs
drwxr-xr-x   3 u0017496 u0017496  4096 Jun 22 22:43 etc
drwxr-xr-x   8 u0017496 u0017496  4096 Jun 22 22:40 include
drwxr-xr-x   6 u0017496 u0017496  4096 Jun 23 02:12 lib
-rw-r--r--   1 u0017496 u0017496  3699 Jun 22 22:35 LICENSE.txt
drwxr-xr-x 238 u0017496 u0017496 24576 Jun 23 02:23 pkgs
drwxr-xr-x   4 u0017496 u0017496  4096 Jun 22 22:43 share
drwxr-xr-x   3 u0017496 u0017496  4096 Jun 22 22:43 ssl


newuser@sys-87926:~$ conda uninstall matplotlib

CondaIOError: Missing write permissions in: /usr/local/miniconda3
#
# You don't appear to have the necessary permissions to remove packages
# into the install area '/usr/local/miniconda3'.
# However you can clone this environment into your home directory and
# then make changes to it.
# This may be done using the command:
#
# $ conda create -n my_root --clone="/usr/local/miniconda3"


** 이 작업 및 test 결과는 아래의 Continuum github에도 comment로 올렸습니다.

https://github.com/ContinuumIO/anaconda-issues/issues/270

2017년 6월 14일 수요일

ppc64le 환경에서의 anaconda python2&3 환경 동시 설정 - XGBoost, OpenCV, KoNLPy, MeCab 등

먼저, ppc64le 환경에서의 miniconda 설치에 대해서는 아래 post를 참조하십시요.

http://hwengineer.blogspot.kr/2017/05/minsky-continuum-anaconda.html

여기서는 miniconda3 (python3.6)이 이미 설치된 환경에서 시작하며, ppc64le 환경에서 anaconda를 사용하실 때 흔히 있을 수 있는 질문과 응답 형식으로 정리했습니다.


Q1.  Anaconda 대신 Miniconda3로 가야하는 경우에는 다음 패키지도 conda install로 설치 가능한지 ? 

numpy, pandas, sklearn(scikit-learn), joblib, flask, bs4(beautiful soup), MKL(math kernel library), 

A1.  예, 아래와 같이 다 conda로 install 잘 됩니다.  단 하나, MKL은 ppc64le에는 없습니다만, 그와 수반되어 사용되는 numpy 및 scipy는 아래와 같이 conda로 잘 설치되므로 꼭 MKL이 있어야 할 필요는 없습니다.

u0017496@sys-87576:~$ conda install joblib
Fetching package metadata .........
Solving package specifications: .

Package plan for installation in environment /home/u0017496/miniconda3:

The following NEW packages will be INSTALLED:

    joblib: 0.11-py36_0

Proceed ([y]/n)? y

joblib-0.11-py 100% |#########################################################| Time: 0:00:00   7.17 MB/s

u0017496@sys-87576:~$ conda install scikit-learn
Fetching package metadata .........
Solving package specifications: .

Package plan for installation in environment /home/u0017496/miniconda3:

The following NEW packages will be INSTALLED:

    scikit-learn: 0.18.1-np112py36_1

Proceed ([y]/n)? y

scikit-learn-0 100% |#########################################################| Time: 0:00:00  14.48 MB/s

u0017496@sys-87576:~$ conda install pandas
Fetching package metadata .........
Solving package specifications: .

Package plan for installation in environment /home/u0017496/miniconda3:

The following NEW packages will be INSTALLED:

    pandas:          0.20.1-np112py36_0
    python-dateutil: 2.6.0-py36_0
    pytz:            2017.2-py36_0

Proceed ([y]/n)? y

pytz-2017.2-py 100% |#########################################################| Time: 0:00:00   7.85 MB/s
python-dateuti 100% |#########################################################| Time: 0:00:00   8.43 MB/s
pandas-0.20.1- 100% |#########################################################| Time: 0:00:02  10.59 MB/s

u0017496@sys-87576:~$ conda install flask
Fetching package metadata .........
Solving package specifications: .

Package plan for installation in environment /home/u0017496/miniconda3:

The following NEW packages will be INSTALLED:

    click:        6.7-py36_0
    flask:        0.12.2-py36_0
    itsdangerous: 0.24-py36_0
    jinja2:       2.9.6-py36_0
    markupsafe:   0.23-py36_2
    werkzeug:     0.12.2-py36_0

Proceed ([y]/n)? y

click-6.7-py36 100% |#########################################################| Time: 0:00:00   7.14 MB/s
itsdangerous-0 100% |#########################################################| Time: 0:00:00  11.12 MB/s
markupsafe-0.2 100% |#########################################################| Time: 0:00:00  15.42 MB/s
werkzeug-0.12. 100% |#########################################################| Time: 0:00:00   5.71 MB/s
jinja2-2.9.6-p 100% |#########################################################| Time: 0:00:00  14.30 MB/s
flask-0.12.2-p 100% |#########################################################| Time: 0:00:00   7.08 MB/s

u0017496@sys-87576:~$ conda install beautifulsoup4
Fetching package metadata .........
Solving package specifications: .

Package plan for installation in environment /home/u0017496/miniconda3:

The following NEW packages will be INSTALLED:

    beautifulsoup4: 4.6.0-py36_0

Proceed ([y]/n)? y

beautifulsoup4 100% |#########################################################| Time: 0:00:00   7.12 MB/s


u0017496@sys-87576:~$ conda install numpy scipy
Fetching package metadata .........
Solving package specifications: .

# All requested packages already installed.
# packages in environment at /home/u0017496/miniconda3:
#
numpy                     1.12.1                   py36_0
scipy                     0.19.0              np112py36_0


Q2.  Python2 & 3을 위해서 Anaconda2, Anaconda3을 각각 설치하는 대신에 아래 URL에 나오는 것처럼 Anaconda3 하나만 설치하고 그 내부에 python2 가상환경 구축 가능한지?

www.continuum.io/blog/developer-blog/python-3-support-anaconda

A2.  예, 잘 됩니다.  

u0017496@sys-87576:~$ conda create -n py2k python=2 anaconda
Fetching package metadata .........
Solving package specifications: .

Package plan for installation in environment /home/u0017496/miniconda3/envs/py2k:

The following NEW packages will be INSTALLED:

    alabaster:          0.7.10-py27_0
    anaconda:           4.4.0-np112py27_0
    anaconda-client:    1.6.3-py27_0
....
...
jupyter-1.0.0- 100% |#########################################################| Time: 0:00:00  10.50 MB/s
anaconda-4.4.0 100% |#########################################################| Time: 0:00:00   5.53 MB/s
#
# To activate this environment, use:
# > source activate py2k
#
# To deactivate this environment, use:
# > source deactivate py2k
#

py2k, 즉 python2 가상환경에 들어가려면 다음과 같이 하시면 됩니다.

u0017496@sys-87576:~$ source activate py2k

python이 이제 2.7.13 버전이 구동되는 것을 보실 수 있습니다.

(py2k) u0017496@sys-87576:~$ python
Python 2.7.13 |Anaconda 4.4.0 (64-bit)| (default, Mar 16 2017, 18:34:18)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>>


Q3. XGBoost의 경우, pip install을 통한 설치는 CPU 버전 패키지만 지원합니다.  
GPU 사용가능한 XGBoost는 아래 URL의 Github 소스코드 + CUB 관련 파일 컴파일이 필요한데 ppc64le에서도 가능한지?

github.com/dmlc/xgboost/tree/master/plugin/updater_gpu

A3.  예, 잘 됩니다.  git clone으로 위의 package를 download 받아 그 안의 다음 4개의 Makefile에서 intel-specifc한 option인 -msse2만 제거하면 잘 됩니다.

u0017496@sys-87576:~/$ git clone --recursive https://github.com/dmlc/xgboost.git

u0017496@sys-87576:~/$ cd xgboost

u0017496@sys-87576:~/xgboost$ vi ./rabit/guide/Makefile ./rabit/Makefile ./dmlc-core/Makefile ./Makefile

u0017496@sys-87576:~/xgboost$ ./build.sh
...
g++ -std=c++11 -Wall -Wno-unknown-pragmas -Iinclude   -Idmlc-core/include -Irabit/include -I/include -O3 -funroll-loops -mcpu=power8 -fPIC -fopenmp -o xgboost  build/cli_main.o build/logging.o build/learner.o build/common/common.o build/common/hist_util.o build/metric/metric.o build/metric/rank_metric.o build/metric/elementwise_metric.o build/metric/multiclass_metric.o build/objective/multiclass_obj.o build/objective/objective.o build/objective/rank_obj.o build/objective/regression_obj.o build/data/sparse_page_dmatrix.o build/data/sparse_page_source.o build/data/sparse_page_writer.o build/data/simple_csr_source.o build/data/data.o build/data/sparse_page_raw_format.o build/data/simple_dmatrix.o build/tree/updater_prune.o build/tree/tree_updater.o build/tree/updater_histmaker.o build/tree/updater_refresh.o build/tree/updater_sync.o build/tree/updater_colmaker.o build/tree/updater_skmaker.o build/tree/tree_model.o build/tree/updater_fast_hist.o build/gbm/gbtree.o build/gbm/gblinear.o build/gbm/gbm.o build/c_api/c_api.o build/c_api/c_api_error.o dmlc-core/libdmlc.a rabit/lib/librabit.a  -pthread -lm  -fopenmp -lrt  -lrt
Successfully build multi-thread xgboost


Q4. konlpy는 JDK 및 Jpype1 관련 설정 및 PATH, JAVA_HOME 등등 경로 지정 필요합니다. python2, python3에서 모두 잘 작동하는지 ?

A4.  잘 됩니다.

먼저 기본 환경인 python3에서 다음과 같이 잘 됩니다.

u0017496@sys-87576:~/xgboost$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-ppc64el
u0017496@sys-87576:~/xgboost$ python
Python 3.6.0 |Continuum Analytics, Inc.| (default, Mar 16 2017, 19:36:14)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from konlpy.tag import *
>>> Kkma()
<konlpy.tag._kkma.Kkma instance at 0x3fff9561be60>

이어서 위에서 설치했던 가상환경의 python2에서도 잘 됩니다.  다만 환경 변수 등은 가상환경 속에서 다시 또 해줘야 합니다.

u0017496@sys-87576:~$ source activate py2k
(py2k) u0017496@sys-87576:~$ python
Python 2.7.13 |Anaconda 4.4.0 (64-bit)| (default, Mar 16 2017, 18:34:18)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> from konlpy.tag import *
>>> Kkma()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Kkma instance has no __call__ method

위에서 error가 난 이유는 JAVA_HOME 설정이 이 가상환경 속에서는 안 되어 있기 때문입니다.  그걸 해주면 error는 없어집니다.

(py2k) u0017496@sys-87576:~$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-ppc64el
(py2k) u0017496@sys-87576:~$ python
Python 2.7.13 |Anaconda 4.4.0 (64-bit)| (default, Mar 16 2017, 18:34:18)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> from konlpy.tag import *
>>> Kkma()
<konlpy.tag._kkma.Kkma instance at 0x3fff9561be60>


Q5. KoNLPy의 mecab 추가 설치 및 작동이 잘 되는지 ?  가령 아래 code가 python2, python3에서 모두 잘 되는지 ?

from konlpy.tag import *
Mecab()

A5.  다음과 같이 잘 됩니다.  처음에는 error가 나서 당황했는데, 보니 mecab-ko-dic를 따로 설치하면 해결되는 문제입니다.  

먼저 mecab-python3을 pip로 설치하고, 그 뒤에 mecab-ko-dic을 download 받아 설치합니다.

u0017496@sys-87576:~$ pip install mecab-python3

u0017496@sys-87576:~$ wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-1.6.1-20140814.tar.gz

u0017496@sys-87576:~$ tar -zxvf mecab-ko-dic-1.6.1-20140814.tar.gz
u0017496@sys-87576:~$ cd mecab-ko-dic-1.6.1-20140814
u0017496@sys-87576:~/mecab-ko-dic-1.6.1-20140814$ ./autogen.sh
u0017496@sys-87576:~/mecab-ko-dic-1.6.1-20140814$ ./configure
u0017496@sys-87576:~/mecab-ko-dic-1.6.1-20140814$ make
u0017496@sys-87576:~/mecab-ko-dic-1.6.1-20140814$ sudo make install

u0017496@sys-87576:~/mecab-ko-dic-1.6.1-20140814$ python
Python 3.6.0 |Continuum Analytics, Inc.| (default, Mar 16 2017, 19:36:14)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from konlpy.tag import *
>>> Mecab('/usr/lib/mecab/dic/mecab-ko-dic')
<konlpy.tag._mecab.Mecab object at 0x3fffa01773c8>

python2의 가상환경에서도 물론 동일하게 잘 됩니다.

u0017496@sys-87576:~/mecab-ko-dic-1.6.1-20140814$ source activate py2k
(py2k) u0017496@sys-87576:~/mecab-ko-dic-1.6.1-20140814$ python
Python 2.7.13 |Anaconda 4.4.0 (64-bit)| (default, Mar 16 2017, 18:34:18)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> from konlpy.tag import *
>>> Mecab('/usr/lib/mecab/dic/mecab-ko-dic')
<konlpy.tag._mecab.Mecab instance at 0x3fff754e7cb0>
>>>


Q5.  OpenCV & GraphViz의 경우, conda install 을 사용하지 않고 설치가 가능하다면, python2&3 안에서 호출 가능한 형태로 설치되는 것인지?

import cv2
import graphviz

A6. 예, 둘다 잘 됩니다.   https://repo.continuum.io/pkgs/free/linux-ppc64le에서 opencv-3.1.0-np112py27_2.tar.bz2 등의 opencv package를 받아와서 설치하면 됩니다.

먼저 python3를 위한 opencv package를 설치해서 테스트합니다.

u0017496@sys-87576:~$ wget https://repo.continuum.io/pkgs/free/linux-ppc64le/opencv-3.1.0-np112py36_2.tar.bz2
--2017-06-14 03:35:25--  https://repo.continuum.io/pkgs/free/linux-ppc64le/opencv-3.1.0-np112py36_2.tar.bz2
Resolving repo.continuum.io (repo.continuum.io)... 104.16.19.10, 104.16.18.10, 2400:cb00:2048:1::6810:120a, ...
Connecting to repo.continuum.io (repo.continuum.io)|104.16.19.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13145265 (13M) [application/x-tar]
Saving to: ‘opencv-3.1.0-np112py36_2.tar.bz2’

opencv-3.1.0-np112py36_2.t 100%[=====================================>]  12.54M  9.02MB/s    in 1.4s

2017-06-14 03:35:26 (9.02 MB/s) - ‘opencv-3.1.0-np112py36_2.tar.bz2’ saved [13145265/13145265]


u0017496@sys-87576:~$ mkdir opencv-3.1.0-py36
u0017496@sys-87576:~$ cd opencv-3.1.0-py36
u0017496@sys-87576:~/opencv-3.1.0-py36$ tar -jxvf ../opencv-3.1.0-np112py36_2.tar.bz2

u0017496@sys-87576:~$ export PYTHONPATH=$PYTHONPATH:/home/u0017496/opencv-3.1.0-py36/lib/python3.6/site-packages

u0017496@sys-87576:~$ python
Python 3.6.0 |Continuum Analytics, Inc.| (default, Mar 16 2017, 19:36:14)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> import graphviz
>>>

다음으로 python2를 위한 opencv package를 설치해서 테스트합니다.

u0017496@sys-87576:~$ wget https://repo.continuum.io/pkgs/free/linux-ppc64le/opencv-3.1.0-np112py27_2.tar.bz2
--2017-06-14 03:35:38--  https://repo.continuum.io/pkgs/free/linux-ppc64le/opencv-3.1.0-np112py27_2.tar.bz2
Resolving repo.continuum.io (repo.continuum.io)... 104.16.18.10, 104.16.19.10, 2400:cb00:2048:1::6810:130a, ...
Connecting to repo.continuum.io (repo.continuum.io)|104.16.18.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13147104 (13M) [application/x-tar]
Saving to: ‘opencv-3.1.0-np112py27_2.tar.bz2’

opencv-3.1.0-np112py27_2.t 100%[=====================================>]  12.54M  9.76MB/s    in 1.3s

2017-06-14 03:35:39 (9.76 MB/s) - ‘opencv-3.1.0-np112py27_2.tar.bz2’ saved [13147104/13147104]

u0017496@sys-87576:~$ mkdir opencv-3.1.0-py27
u0017496@sys-87576:~$ cd opencv-3.1.0-py27
u0017496@sys-87576:~/opencv-3.1.0-py27$ tar -jxvf ../opencv-3.1.0-np112py27_2.tar.bz2

u0017496@sys-87576:~$ source activate py2k

(py2k) u0017496@sys-87576:~$ export PYTHONPATH=$PYTHONPATH:/home/u0017496/opencv-3.1.0-py27/lib/python2.7/site-packages

(py2k) u0017496@sys-87576:~$ python
Python 2.7.13 |Anaconda 4.4.0 (64-bit)| (default, Mar 16 2017, 18:34:18)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> import cv2
>>> import graphviz
>>>

2017년 5월 15일 월요일

Minsky 서버에 한국어 text 분석을 위한 기초 환경 (gensim, keras, KoNLPy, MeCab) 및 Oracle client 버전 설치하기

Minsky 서버에 gensim 2.0.0, keras 2.0.4, KoNLPY, MeCab 및 Oracle client 버전을 설치하는 방법을 정리했습니다.

gensim은 python library로서 document로부터 어의(semantics)를 추출하는데 사용됩니다.  pip 명령으로 설치하면 되는데, 특정 버전을 설치하기 위해서는 다음과 같이 '==version'의 형태를 사용하면 됩니다.

u0017496@sys-87250:~$ sudo pip install gensim==2.0.0
Collecting gensim==2.0.0
  Downloading gensim-2.0.0.tar.gz (14.1MB)
    100% |████████████████████████████████| 14.2MB 70kB/s
Requirement already satisfied (use --upgrade to upgrade): numpy>=1.3 in /usr/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): scipy>=0.7.0 in /usr/local/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): six>=1.5.0 in /usr/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): smart_open>=1.2.1 in /usr/local/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): boto>=2.32 in /usr/lib/python2.7/dist-packages (from smart_open>=1.2.1->gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): bz2file in /usr/local/lib/python2.7/dist-packages (from smart_open>=1.2.1->gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/lib/python2.7/dist-packages (from smart_open>=1.2.1->gensim==2.0.0)
Installing collected packages: gensim
  Running setup.py install for gensim ... done
Successfully installed gensim-2.0.0


keras는 high-level neural networks API로서, python으로 작성되어 tensorflow나 theano 위에서 사용됩니다.  역시 pip 명령으로 설치하면 됩니다.

u0017496@sys-87250:~$ sudo pip install keras==2.0.4
Collecting keras==2.0.4
  Downloading Keras-2.0.4.tar.gz (199kB)
    100% |████████████████████████████████| 204kB 2.5MB/s
Collecting theano (from keras==2.0.4)
  Downloading Theano-0.9.0.tar.gz (3.1MB)
    100% |████████████████████████████████| 3.1MB 310kB/s
Collecting pyyaml (from keras==2.0.4)
  Downloading PyYAML-3.12.tar.gz (253kB)
    100% |████████████████████████████████| 256kB 2.3MB/s
Requirement already satisfied (use --upgrade to upgrade): six in /usr/lib/python2.7/dist-packages (from keras==2.0.4)
Requirement already satisfied (use --upgrade to upgrade): numpy>=1.9.1 in /usr/lib/python2.7/dist-packages (from theano->keras==2.0.4)
Requirement already satisfied (use --upgrade to upgrade): scipy>=0.14 in /usr/local/lib/python2.7/dist-packages (from theano->keras==2.0.4)
Installing collected packages: theano, pyyaml, keras
  Running setup.py install for theano ... done
  Running setup.py install for pyyaml ... done
  Running setup.py install for keras ... done
Successfully installed keras-2.0.4 pyyaml-3.12 theano-0.9.0


KoNLPy는 Korean National Language Processing in python으로서, 글자 그대로 한국어를 python으로 처리할 때 사용됩니다.  '콘엔엘파이'라고 읽습니다.  이 역시 pip로 설치합니다.

u0017496@sys-87250:~$ sudo pip install konlpy
Collecting konlpy
  Downloading konlpy-0.4.4-py2.py3-none-any.whl (22.5MB)
    100% |████████████████████████████████| 22.5MB 46kB/s
Collecting JPype1>=0.5.7; python_version == "2.6" or python_version == "2.7" (from konlpy)
  Downloading JPype1-0.6.2.tar.gz (147kB)
    100% |████████████████████████████████| 153kB 3.7MB/s
Installing collected packages: JPype1, konlpy
  Running setup.py install for JPype1 ... done
Successfully installed JPype1-0.6.2 konlpy-0.4.4


MeCab은 일본어 문자의 형태학적 분석을 위해 사용되는 패키지인데, 이는 Ubuntu OS 안에 다음과 같은 여러가지 package로 포함되어 있습니다.  다음과 같이 apt-get 명령으로 설치하면 됩니다.

u0017496@sys-87250:~$ sudo apt-get install mecab-utils libmecab-dev libmecab2 libmecab-jni ruby-mecab mecab-ipadic python-mecab libmecab-java mecab
...
reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91
emitting double-array: 100% |###########################################|
reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316
emitting matrix      : 100% |###########################################|

done!
Setting up python-mecab (0.99.6-1build2) ...
Setting up ruby-mecab (0.99.6-2build7) ...
Processing triggers for libc-bin (2.23-0ubuntu7) ...

위에서 보셨다시피 python-mecab이 이미 포함되어 있으므로, pip 명령으로 mecab-python을 설치하려고 해보면 이미 충족되었다고 나옵니다.

u0017496@sys-87250:~$ sudo pip install mecab-python
Requirement already satisfied (use --upgrade to upgrade): mecab-python in /usr/lib/python2.7/dist-packages


alien은 Ubuntu에서 주로 사용되는 debian 패키지와 Redhat에서 주로 사용되는 rpm 패키지 등을 상호 변환해주는 tool이며, Ubuntu OS에 기본 패키지로 포함되어 있습니다.  따라서 다음과 같이 apt-get 명령으로 설치만 해주면 됩니다.  이러면 rpm 등 필요한 패키지를 자동으로 함께 설치합니다.

u0017496@sys-87250:~$ sudo apt-get install alien

---------------------------

이제 Oracle client 버전을 설치해보겠습니다.   Oracle DBMS의 서버 버전은 Minsky 서버의 processor 아키텍처인 ppc64le에 포팅이 되어 있지 않고, 앞으로도 그럴 일은 없어 보입니다.  (IBM에서는 왜 Linux에 값비싼 Oracle을 쓰느냐, Linux를 쓰려거든 당연히 MariaDB나 PostgreSQL, MySQL 등의 오픈소스 DBMS를 쓰는 것이 맞는 방향이다 라고 말하고 있습니다.)  그러나 Linux건 UNIX건 Oracle DBMS가 차지하는 막대한 비중을 생각할 때, Linux 서버들이 Oracle 서버에는 접속할 필요가 있다고 보았는지 Oracle client 버전은 최신 12 버전까지 모두 포팅되어 있습니다.  아래의 Oracle site에서 무료 회원 가입하고 download 받으시면 됩니다.

http://www.oracle.com/technetwork/topics/linux-power-le-2835260.html



u0017496@sys-87250:/usr/local$ ls ~/
instantclient-basic-linux.leppc64-12.1.0.2.0.zip
instantclient-jdbc-linux.leppc64-12.1.0.2.0.zip
instantclient-odbc-linux.leppc64-12.1.0.2.0.zip
instantclient-sdk-linux.leppc64-12.1.0.2.0.zip
instantclient-sqlplus-linux.leppc64-12.1.0.2.0.zip

이것들을 unzip으로 다음과 같이 풀어놓으면 됩니다.

u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-basic-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-jdbc-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-odbc-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-sdk-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-sqlplus-linux.leppc64-12.1.0.2.0.zip

내용을 살펴보면 다음과 같이 sqlplus 실행파일과 각종 shared object (so) 파일들이 들어 있습니다.

u0017496@sys-87250:/usr/local/instantclient_12_1$ ls
adrci                  libheteroxa12.so  libsqlplus.so             sdk
BASIC_README           libnnz12.so       libsqora.so.12.1          sqlplus
genezi                 libocci.so.12.1   ODBC_IC_Readme_Unix.html  SQLPLUS_README
glogin.sql             libociei.so       odbc_update_ini.sh        uidrvci
help                   libocijdbc12.so   ojdbc6.jar                xstreams.jar
JDBC_README            libons.so         ojdbc7.jar
libclntshcore.so.12.1  liboramysql12.so  orai18n.jar
libclntsh.so.12.1      libsqlplusic.so   orai18n-mapping.jar


이제 LD_LIBRARY_PATH와 PATH 등 환경변수를 설정하고 sqlplus를 구동해보겠습니다.

u0017496@sys-87250:/usr/local/instantclient_12_1$ cd
u0017496@sys-87250:~$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/instantclient_12_1
u0017496@sys-87250:~$ export PATH=$PATH:/usr/local/instantclient_12_1

u0017496@sys-87250:~$ which sqlplus
/usr/local/instantclient_12_1/sqlplus

u0017496@sys-87250:~$ sqlplus
sqlplus: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

놀랍게도 error가 납니다.  놀라실 것 없습니다.  AIX 시절의 기억을 살려보면, Oracle은 async I/O를 사용하지요.  Linux에도 aio library가 있고, apt-get 명령으로 설치할 수 있습니다.

u0017496@sys-87250:~$ sudo apt-get install libaio-dev libaio1 libaio1-dbg

이제 다시 sqlplus를 구동해보겠습니다.  잘 되는 것을 보실 수 있습니다.

u0017496@sys-87250:~$ sqlplus

SQL*Plus: Release 12.1.0.2.0 Production on Sun May 14 21:10:37 2017

Copyright (c) 1982, 2015, Oracle.  All rights reserved.

Enter user-name: