[Python] Conda에 대한 간단 고찰 및 mac에서 Jupyter notebook 시 오류 해결 Develop Tip

몇년전 블로그 내용에서 easy_install 대신 pip를 사용하는 것이 낫다고 하였는데,
최근에는 거의 pip로 모두 기술되고 있는 상황입니다.

그리고 이제는 대부분의 개발 테스트 등을 모두 VirtualEnv 환경에서 개발하고 있습니다.

간단히 여러 버전의 Python이 설치되어 있다고 할 때,

$ sudo pip install virtualenv

(sudo는 시스템 python 인터프리터에 설치하는 경우에 필요함)

라고 virtualenv를 설치하고,

$ virtualenv -p /usr/local/bin/python3 /opt/py3

와 같은 식으로 /opt/py3에 python3 을 설치하고,

$ source /opt/py3/bin/activate
(py3) $

라는 식으로 swtching 을 하면 됩니다.

하지만 conda가 있으므로 pyenv의 효용성은 떨어진다 할 수도 있다는 생각입니다.


conda (https://conda.io/docs/)는 한마디로 말하면 아나콘다 (또는 최소버전의 미니콘다)를 포함하여 numpy, pandas와 같은 통계에 필요한 것을 비롯하여 시각화를 위한 mathplotlib, biopython, 머신러닝 관련 수많은 패키지 등등을 하나 더 상위 개념의
패키징을 하여 이용할 수 있도록 하였습니다.

미니콘다를 통해 설치를 하면 자신의 시스템에 쉽게 설치 가능합니다.

그 다음에는 conda 명령을 통하여 자신이 원하는 것을 하면 되는데 일단은 virtualenv 처럼 입맛에 맞는
 파이썬 버전에 따라 기본 패키지를 설치하는 것입니다. 

우선 위의 미니콘다를 설치하고 터미널에서 conda 명령이 있는지 확인합니다.

$ which conda
/opt/mc3/bin/conda

(위에서 miniconda를 /opt/mc3 에 설치한 상황이었습니다)

그 다음에는 conda에서 설치할 수 있는 파이썬 버전을 확인해 봅니다.

$ conda search python
Fetching package metadata .........
biopython                    1.60                 np15py26_0  defaults
                             1.60                 np15py27_0  defaults
...
python                       1.0.1                         0  defaults
                             2.6.8                         1  defaults
                             2.6.8                         2  defaults
                             2.6.8                         3  defaults
                             2.6.8                         4  defaults
                             2.6.8                         5  defaults
                             2.6.8                         6  defaults
...
                             2.7.12                        0  defaults
                             2.7.12                        1  defaults
                             2.7.13                        0  defaults
                             3.3.0                         3  defaults
                             3.3.0                         4  defaults
...
                             3.6.0                         0  defaults
                             3.6.1                         0  defaults
                          *  3.6.1                         2  defaults
...

와 같이 설치할 수 있음을 보여줍니다.

이제 파이썬 3.5로 기본 환경을 만들어 봅니다.

$ conda create -n py35 python=3.5
Fetching package metadata .........
Solving package specifications: .

Package plan for installation in environment /opt/mc3/envs/py35:

The following NEW packages will be INSTALLED:

    openssl:    1.0.2l-0
    pip:        9.0.1-py35_1
    python:     3.5.3-1
    readline:   6.2-2
    setuptools: 27.2.0-py35_0
    sqlite:     3.13.0-0
    tk:         8.5.18-0
    wheel:      0.29.0-py35_0
    xz:         5.2.2-1
    zlib:       1.2.8-3

Proceed ([y]/n)?

#
# To activate this environment, use:
# > source activate py35
#
# To deactivate an active environment, use:
# > source deactivate
#

위와 같이 쉽게 환경 설치가 끝나고,

해당 환경으로 바꾸는 것은

source activate py35
(py35) $

라고 바꿉니다.

$ which python
/opt/mc3/envs/py35/bin/python
(py35) $ python -V
Python 3.5.3 :: Continuum Analytics, Inc.

확인해 보니 3.5 설치된 것이 맞군요.

설치된 패키지를 확인하려면,

(py35) $ conda list
# packages in environment at /opt/mc3/envs/py35:
#
openssl                   1.0.2l                        0
pip                       9.0.1                    py35_1
python                    3.5.3                         1
readline                  6.2                           2
setuptools                27.2.0                   py35_0
sqlite                    3.13.0                        0
tk                        8.5.18                        0
wheel                     0.29.0                   py35_0
xz                        5.2.2                         1
zlib                      1.2.8                         3

jupyter 패키지를 새로 추가해 보겠습니다.

(py35) $ conda install jupyter
Fetching package metadata .........
Solving package specifications: .

Package plan for installation in environment /opt/mc3/envs/py35:

The following NEW packages will be INSTALLED:

    appnope:            0.1.0-py35_0
    bleach:             1.5.0-py35_0
    decorator:          4.0.11-py35_0
...
    traitlets:          4.3.2-py35_0
    wcwidth:            0.1.7-py35_0
    widgetsnbextension: 2.0.0-py35_0

Proceed ([y]/n)?

이제 쥬피터 노트북을 띄워보려고 하였습니다.

(py35) $ jupyter notebook
[I 16:51:18.918 NotebookApp] Serving notebooks from local directory: /Users/moonchangchae/work/VivaNS
[I 16:51:18.918 NotebookApp] 0 active kernels
[I 16:51:18.918 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/?token=14bf4af4d3f8cff59ec829827043c289962342a330361ed6
[I 16:51:18.918 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 16:51:18.920 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=14bf4af4d3f8cff59ec829827043c289962342a330361ed6
0:97: execution error: "http://localhost:8888/tree?token=ecb1c73d2420ba61bd2b68cbe0bece22a348b5a5fee6565e"이(가) ‘open location’ 메시지를 인식하지 못합니다. (-1708)

위와 같이 오류가 나오는 것이었습니다.

수동으로 브라우져를 열어 
http://localhost:8888

를 접속해서 토큰을 물어보면 넣어주면 되기는 합니다만,
왜 맥에서는 안될까 했습니다.

간단한 해결책은,

(py35) $ echo "c.NotebookApp.browser = u'Safari'" > ~/.jupyter/jupyter_notebook_config.py

라고 해주고, 다시 쥬피터 노트북을 다시 실행시켜 보면,

(py35) $ jupyter notebook
[I 16:55:05.608 NotebookApp] Serving notebooks from local directory: /Users/moonchangchae/work/VivaNS
[I 16:55:05.608 NotebookApp] 0 active kernels
[I 16:55:05.608 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/?token=023e0f601e4f6ab2d4e85441d45b939e16f2d2b84456c531
[I 16:55:05.608 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 16:55:05.612 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=023e0f601e4f6ab2d4e85441d45b939e16f2d2b84456c531
[I 16:55:06.064 NotebookApp] Accepting one-time-token-authenticated connection from ::1

라고 나오면서,

사파리가 자연스럽게 잘 나타납니다.

이런 식으로 잘 뜹니다.

마지막으로 conda의 환경을 벗어나고 기존 환경을 지우는 것을 해 봅니다.

현재 py35 환경에 있었을 경우,

(py35) $ source deactivate
$

명령으로 해당 환경을 벗어 납니다.

모든 설치 환경을 확인해 보려면,

$ conda info --envs
# conda environments:
#
py35                     /opt/mc3/envs/py35
root                  *  /opt/mc3

라고 나옵니다.

py35만 나옵니다. (다른 설치된 것이 있으면 같이 나옵니다)

이제 py35 환경을 모두 지웁니다.

$ conda remove -n py35 --all

Package plan for package removal in environment /opt/mc3/envs/py35:

The following packages will be REMOVED:

    appnope:            0.1.0-py35_0
    bleach:             1.5.0-py35_0
...
Proceed ([y]/n)? y

위와 같은 방식으로 기존에 작업하던 환경을 깨끗이 지울 수 있습니다.

이제 머신러닝을 하기 위해서는
기존처럼 pip가 아니라 conda와 jupyter notebook을 적극 활용해야 되겠습니다.


어느 분께는 도움이 되셨기를...







핑백

  • 지훈현서 : [Python] pyenv, conda, virtualenv, pip, autoenv 2017-08-25 11:19:25 #

    ... vate$라고 하여 해당 환경을 빠져 나옵니다. (필요없으면)$ rm -rf $HOME/py3라고 해당 가상환경을 모두 날릴 수 있습니다. conda 지난번에 conda에 대한 고찰에서 살펴본 바와 같이,virtualenv 개념을 확장해서 conda를 사용할 수 있습니다. 사실 콘다 (아나콘다, 미니콘다) 자체는 파이썬 뿐만 아니라 ... more

덧글

댓글 입력 영역

구글애드텍스트