© 2017 by Doran Bae 

Subscribe!
You are reading Coding Otter, stuffed with articles about big data, data science development, ML in production, managing data science projects, and many more. ​
About the host
I'm Doran Bae, Data Scientist @TVB turning data into products and stories. More about me.

인문계를 위한 Python environment 세팅

제가 처음 프로그래밍을 시작했을 때, 저랑 연배가 비슷한 프로그래머에게 어떤 언어를 먼저 배우면 좋을지 물어보았습니다. 그 분이 답변을 주시길, Java를 먼저 배우는 것이 좋겠다고 하시면서, 그 이유로는 Java를 배우면 다른 프로그래밍 언어를 배우기 아주 쉬울 것이라 하셨습니다. 성격 급한 저는 당장 그 길로 강남에 있는 유명한 컴퓨터 학원에 가서 Java 수업에 등록을 하였고, 네.. 전 지금 Java가 뭔지 아직도 잘 모르겠습니다.

내가 게으른 것이 아니라, 나에게 주어진 방향이 잘못되었다고 믿었던 저는 다른 프로그래머에게 똑같은 질문을 하였습니다. 저보다 몇 년 어린 프로그래머였는데, 그 분은 Python을 추천해 주시며, Python 하나로 다 할 수 있으니 걱정 말라고 하셨습니다. 이번엔 학원에 등록금을 낭비하지 않았고, 그 프로그래머와 데이트 비용에 보탰습니다. 저는 지금 (다행이) Python 밖에 못 쓰지만 프로그래밍을 하면서 불편한 점 하나 없고, 다른 언어를 배울 생각조차 하고 있지 않습니다. 이렇게 고마운 Python을 보다 더 효율적으로 사용하는 방법에 대해서 알아보겠습니다.

왜 Python environments가 필요할까?

세상 모든 문제가 그렇듯이, 어떤 문제를 해결하기 위하여 단 한가지의 솔루션은 없습니다. 프로그래밍도 마찬가지 입니다. 우리에게 너무 친숙한 Stack Overflow를 보더라도 알 수 있습니다. 한 가지 질문에 아주 다양한 방법의 솔루션이 있을 수 있습니다. 고수들은 자신의 경험에 기반하여 어떻게 비슷한 문제를 해결했는지 공유하고 있고, 저는 이분들이 제시한 솔루션을 그대로 ctr + c , ctr + v 하곤 합니다. 고수들의 조언에 따라 요런 library를 깔기도 하고, 저런 library를 깔기도 하면서 서서히 문제가 발생하게 됩니다.

Breaking changes. 내가 이번에 새로 install한 요 library와 세팅이 지난 주 작업했던 파일과 compatible 하지 않는 경우 입니다. 분명히 어제까지 파일이 아무 문제 없이 execute이 되었는데, 갑자기 오늘부터 되지 않았다? 에이, 아무것도 안 했을 리가 없습니다. 분명 (전혀 관계 없더라도) 다른 무얼 다운받으셨거나, 어느 config를 바꾸셨거나 했을겁니다. 그럼 뭘 다시 바꿔야 하나, 이렇게 되면 슬슬 멘붕이 오기 시작합니다.

이런 문제를 아주 손쉽게 해결할 수 있는 방법이 바로 Python environment 안에서 작업하는 것입니다. 이는 컴퓨터로 하여금 가상의 작업환경을 만들게 하는 것인데, 각각의 작업환경을 그때 그때 필요한 버전/library로 꾸밀 수 있게 되어 있어 충돌이 일어나지 않게 해 줍니다.


아하 모멘트: 소개팅을 아주 많이 받아본다고 생각해봅시다. 내 주위의 아주 좋은 친구들이 추천하는 더 좋고 괜찮은 소개팅 상대를 가리지 않고 다 받다보면, 결국 약속이 겹치는 상황이 발생합니다 - 토요일 오후 2시는 황금 시간대이기 때문이죠. 인문계적인 해결방법은 겹친 소개팅 상대들을 비교하여, 가장 opportunity cost가 많을 것 같은 상대를 우선적으로 고르고 나머지는 포기하는 취사선택을 할 것입니다.

엔지니어링적인 해결방법은 나를 복사 하는 것입니다. 나를 소개팅 상대 수 만큼 복사한 뒤, 복사된 나의 개체를 각각의 소개팅에 보내는 것이죠. Python environment 세팅도 마찬가지 입니다. 개별적인 작업(소개팅)을 하기 위하여 작업환경 (나) 를 여러개 복사하여, 충돌(소개팅 장소/시간 겹침)이 일어나지 않게 하는 작업방법 입니다.

그 외에도 Python environment를 추천하는 이유 여러가지가 있을 수 있습니다. 상대방과 협업을 할 때 각자의 code가 상대방의 computer에서 정상적으로 작업을 할 수 있도록 ensure한다던지 이런건데, 아직 입문하는 단계라면 이런건 별로 와닿지 않으셔도 됩니다. 분명한 것은 지금처럼 계속 Stack Overflow를 보고 ctr + c , ctr + v를 하다보면 언젠가는 compatibility 문제가 발생할 것이라는 것입니다. 어제 문제 없이 execute되었던 function이 오늘 execute되지 않는 일처럼 빡치는 일이 없기에, 저는 아주 강력하게 주장합니다: Python environment를 만들어 작업하는 것을 습관화 하세요.

Python environment를 어떻게 만들까?

아까 위에서 제가 언급 하였던 소개팅을 위한 자신복사 예시를 기억하실 겁니다. 그냥 복사? 안 되겠죠. 날 복사하는 tool도 필요하고, 내가 복사한 나의 개체를 관리해주는 tool도 필요할 것입니다. 이 tool은 간단하게 다운받아서 쓸 수 있는데, 가장 자주쓰이는 2개를 말씀드리자면 다음과 같습니다.

둘 다 비슷하지만, 오늘은 conda를 사용해보겠습니다.

1. Conda system 다운 받기

Conda system을 받아 설치하기 위해는 1-1 ~ 1-4까지의 4가지 요소를 선택해야 합니다.

1-1. Installer 선택하기

현재까지는 총 3개의 installer가 있습니다. 개인으로 작업하신다면 Enterprise platform은 무용지물이고 Anaconda와 Miniconda 둘 중에 하나를 선택하면 되겠습니다.

Anaconda는 설치하려면 3GB disk space가 필요하고, 150개 정도의 machine learning 관련 Package가 함께 설치됩니다. Miniconda는 이름이 말해주듯이 400MB disk space가 필요하고, 기본적인 Package만 같이 설치 됩니다.

1-2. Platform 선택하기

Platform 선택이라고 했지만, 사실 내 컴퓨터 = 선택이죠. 본인 컴퓨터 OS가 Windows, Linux, 아니면 Mac인지에 따라 자동으로 선택 하시면 됩니다.

1-3. Bit-count 선택하기

32- 또는 64-bit를 선택하여야 합니다. 본인에게 맞는 버전을 선택해주세요.

1-4. Python version 선택하기 (for the root environment)

현재 잘 쓰이는 옵션은 3.x 인 듯 합니다. 아직 2.7도 많이 쓰이지만 많은 회사들이 이미 Python3 migration을 하고 있고, 따라서 우리도 Python 3.x를 사용하도록 합시다. 만약 2.7도 필요하고 3.x 도 필요하시다면, environment를 두 개 만드시면 됩니다. 이것이 바로 이번 tutorial의 큰 컨셉이라고 할 수 있습니다.


아하 모멘트: Conda를 논할 때, Root environment랑 additional environment가 언급됩니다. Root environment는 말 그대로 기본 뼈대를 말하는 것이고, additional environment는 기본 뼈대에서 복사되는 environment를 말합니다. 위에서 말했던 소개팅을 위한 복사된 나의 개체는 additional environment 와 동일시 여기면 됩니다. 다시 정리하자면, root environment의 Python 버전이 3.x 이라 할지라도, additional environment를 만들 때에 Python 2.7 버전으로 할 수 있다는 의미입니다.


이제 컴퓨터를 켜시죠



1-5. Anaconda Homepage로 가서 Installer를 다운 받습니다.

Python 2랑 3 중에서 한 개를 고르되, 둘 다 다운 받지는 말아야 합니다. 두 개 다 설치하면 에러가 납니다 (아래 빡침포인트에서 다루겠습니다)

다운 받은 파일을 더블 클릭하여 엽니다.

Continue를 누르고,

또 continue를 누르고,

또 continue를 누릅니다. 아래 파란박스는 Anaconda가 bash profile을 anaconda3로 modify 한다는 내용입니다. 이건 조금 이따 아래에서 다루도록 하겠습니다.

이 뒤로 또 continue...

Continue...

드디어 install!

아마 Mac password를 넣으라고 나올텐데, 넣으시고 Continue 버튼 한 개를 더 누르시면 끝입니다.짠!

Terminal을 엽니다

2. Test하기

Test 방법은 몇가지 있습니다. 터미널에 다음과 같이 쳐 봅니다.

$ python --version
Python 2.7.13 :: Anaconda 4.3.1 (x86_64)

또 다른 방법은 jupyter notebook을 열어보는 것입니다.

$ jupyter notebook

Jupyter notebook이 제대로 안 된다?

네, 이럴 수 있습니다. 위에 말했던 Bash profile (파란박스) 설정에 문제가 있기 때문입니다. 대부분의 경우 Anaconda 2버전과 3버전을 둘 다 다운받아서 생기는 문제입니다. 많이 착각하는 부분이 Anaconda 2를 받으면 Python2 만 쓸 수 있고, 3을 받으면 Python3 만 쓸 수 있다고 생각하는 부분인데, 그렇지 않습니다. 하나만 다운받으면 되고, 둘 중에 무엇을 받을지 모르겠다면, 3버전을 받으시면 됩니다. 3을 받더라도 Python2를 설치하여 사용할 수 있습니다.

혹시 나도 모르는 내 자아가 두가지 버전을 다운받았는지 확인해 보도록 합니다. home directory로 가서 .bash_profile 을 확인합니다.

$ cd ~
$ cat .bash_profile

만약 Anaconda가 하나만 보인다면, 잘 하신 겁니다. 하나가 있는데에도 Jupyter가 안 된다면 버전 문제가 아니라 다른 문제가 있다는 뜻입니다.

문제가 없는 경우:

# added by Anaconda2 4.3.1 installer
export PATH="/Users/xxxx/anaconda/bin:$PATH"

문제가 있는 경우:

# added by Anaconda2 4.3.1 installer
export PATH="/Users/xxxx/anaconda2/bin:$PATH"

# added by Anaconda3 5.1.0 installer 
export PATH="/Users/xxxx/anaconda3/bin:$PATH"

만약 Anaconda가 두 개 보인다면, .bash_profile 을 열어 한 개를 지워주어야 합니다.

$ vim .bash_profile

키보드 a 를 누르면 edit mode로 바뀝니다. Older version을 지운 뒤, 저장 + 닫기 합니다. Vim의 경우 키보드 키를 누릅니다: esc + : + w + q + !


3. Additional environment 만들기

지금까지 했던 작업의 결실을 보겠습니다. Adding a new environment는 눈물 날 정도로 쉽습니다. python 버전은 원하시는대로 설정하시면 됩니다.

$ conda create --name NAME_OF_ENVIRONMENT python=3.4

3-1. 원하는 package 설치하기

$ source activate NAME_OF_ENVIRONMENT
(NAME_OF_ENVIRONMENT) $ conda install pip
(NAME_OF_ENVIRONMENT) $ pip install --upgrade pip

-- tensorflow 설치하기 
(NAME_OF_ENVIRONMENT) $ pip install --upgrade tensorflow


4. Activating and leaving (deactivating) an environment

만든 environment를 실행시킨다는 것은 컴퓨터에게, "자 이제 XX 모드로 들어가줘" 라고 말하는 것과 같습니다. Terminal 앞 부분에 ( NAME_OF_ENVIRONMENT )가 생긴다면 정상적으로 environment에 들어온 것입니다.

$ source activate NAME_OF_ENVIRONMENT
(NAME_OF_ENVIRONMENT) $ 

이 environment 안에서는 어떤 버전의 package를 깔던지 environment 내에서만 일어나는것이지, 기존 시스템과 충돌하지 않습니다. 한 가지 예를 들어봅니다. 제 컴퓨터의 root environment는 Python 2.7 버전이지만, 새로 additional environment에 Python 3를 설치하였습니다. 아래와 같이 python3 environment에 들어가는 순간 python 버전이 바뀜을 볼 수 있습니다.

5. Directory structure

혹시 궁금하신 분들을 위해 잠깐만 소개하겠습니다. home directory에서 anaconda directory로 이동을 하여 파일을 봅니다.

$ cd ~/anaconda
$ ls

\envs: 내가 지금까지 만든 additional environment를 갖고 있습니다 (except root)\pkgs: cached packages가 들어 있습니다.


Source: