Assumptions

  • 아주 친절한 가이드는 아니다. 이 내용을 모두 까먹을 미래의 나를 위한 포스팅이다.
  • WSL 2를 설치할 수 있는 Windows 10 Preview 버전을 권장한다. 5월에 출시 예정된 Windows 10 2004 업데이트에서는 정식으로 지원될 예정이다.
  • 아래에서 |Something-anyting|으로 표현된 것은 각자의 환경에 따라서 바뀌는 부분이다.
  • python과 파이썬을 병행 사용하겠다.
  • 패키지의 경우 처음 나올 때는 pandas 처럼 쓰고 이후 다시 나올 때는 그냥 이름만 쓰겠다.

WSL

윈도우 10의 가장 뛰어난 무기라면 Windows System for Linux (WSL)이 아닐까 싶다. 가상 머신을 돌리는 차원을 넘어서 거의 네이티브에 가깝게 리눅스를 지원한다.1 일단 프리뷰 프로그램에 가입되어 있다면, WSL 2를 쓸 수 있다. 아래 화면에서 보듯이 Windows Store에 Ubuntu가 올라와 있어서 설치에도 크게 신경 쓸 것이 없다.2

다운 받아서 설치하고 한번 실행해줘야 한다. 그래야 계정 설정이 된다. 화면의 안내대로 아이디와 패스워드를 생성하면 된다. 여기까지 마치면 WSL을 쓸 준비 완료다.

Cmder for WSL

이제 좀 더 편리하고 미감도 좋은 윈도용 코맨드라인 툴 Cmder에서 WSL을 설정해보자. 의외로 간단하다.

  • settingsStartupTasks

여기 항목 중에서 {shell::bash}를 하나 클론한 후 이름을 적당한 것으로 바꾸도록 하자. 내 경우는 {Bash::WSL}로 설정했다. 커맨드 필드 아래와 같이 붙여 넣는다. 단축키를 설정하면 편리하게 활용할 수 있다.

%windir%\system32\bash.exe -new_console ~

WSL을 통해 bash가 설치되었으므로 얘를 쓰겠다는 이야기다. bash를 불러오면 Ubuntu에 접근할 수 있다. 끝이다. 탭을 불러올 때 적절하게 선택해 사용하면 된다. 옵션에 보면 디폴트로 Ubuntu 탭을 띄울 수도 있으니 참고하시라.

Ubuntu, First Thing First

우분투의 경우 설치를 한 후 몇 가지 업데이트 작업을 해줘야 한다.

~$ sudo apt update # 업데이트 목록 갱신
~$ sudo apt upgrade # 현재 패키지 업그레이드
~$ sudo apt dist-upgrade # 신규 업데이트 설치

몇 가지 알아두면 좋은 설정 항목이 있다.

~$ sudo dpkg-reconfigure tzdata # 타임존 맞추기 

업데이트하는 패키지 기본 주소가 해외다. 국내로 맞추면 다운로드 등에서 조금 유리할 수 있다. 자세한 내용은 여기를 참고하시라.

Installing python

이제 python을 설치할 차례다. 다소 의아할지 모르겠지만, macos, 윈도에 비해서 파이썬을 설치하고 운용하는 것이 쉽지 않다. 리눅스의 경우 하나하나 설정해야 하는 것이 많다. 내용을 자세히 안다면 세밀하고 명확한 통제가 가능한 것이겠지만, 주류 OS의 편안함에 익숙하다면 당황스러운 경우를 접하게 된다.

우선, 우분투18.04에는 파이썬이 탑재되어 있다. 2.7, 3.6x 두가지 버전이나 이미 깔려 있다. 그럼, 최신 python은 어떻게 설치하고 써야 할까?

~$ sudo apt update
~$ sudo apt install software-properties-common
~$ sudo add-apt-repository ppa:deadsnakes/ppa
~$ sudo apt update
~$ sudo apt install python3.7

이렇게 설치한 후

~$ python3.7 --version
Python 3.7.7 

이렇게 잘 출력되어야 한다. 하지만 매번 python3.7이라고 칠 수는 없는 노릇이니, 얘가 내가 쓰고 싶은 파이썬이란 점을 bash에게 알려줘야 한다.

Not-so-good way

Home 환경에 .bash_aliases를 바꿔주는 방법이다.

cd ~ # 홈으로 이동
~$ sudo nano ~/.bash_aliases 

우분투 18.04에는 nano 에디터가 들어 있다. 없다면, vim을 써도 된다. 이제 이 파일에 아래과 같은 내용을 적고 저장한다. sudo를 쓰는 이유는 파일을 생성하게 되기 때문이다. 좌우간 해당 파일에 아래의 내용을 넣고 저장하자.

alias python=python3.7
alias pip=pip3

aliases를 활성화하기 위해서는 시스템을 다시 시작하거나 아래 명령을 시작하자.

~$ source ~/.bash_aliases

Better way

리눅스에는 심볼릭 링크를 관리할 수 있는 툴이 있다.3 윈도의 바로가기를 생각하면 쉬울 듯 싶다. 먼저 현재 파이썬 버전을 체크해보자. 만일 설정된 파이썬 실행 명령이 없다면 아무 것도 뜨지 않을 것이다.

~$ python -V
Python 2.7.14

~$ which python
/usr/bin/python

아래와 같이 파이썬 버전과 위치가 뜬다.

~$ ls /usr/bin/ | grep python
python
python2
python2.7
python3
python3.6
python3.7
..

/usr/bin 안에 많은 파이썬 버전이 깔려 있음을 알 수 있다. 만일 깔려 있는 파이썬이 없다면 아래와 같이 뜰 것이다.

$ sudo update-alternatives --config python
update-alternatives: error: no alternatives for python

이 녀석을 처음 실행하면 python이 없다고 뜬다. 당연히 update-alternatives가 관리하는 심볼릭 링크가 없기 때문이다. 어쨌든 아래와 같이 해당 시스템에 탑재된 파이썬들을 심볼릭 링크로 생성한다.

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 2

이렇게 심볼릭 링크를 설치한 후 아래와 같이 바꿔가며 사용하면 된다. 단 바꾼 후에는 Ubuntu의 콘솔창을 완전히 내렸다가 다시 올려야 한다.

$ sudo update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.7   2         auto mode
  1            /usr/bin/python2.7   1         manual mode
  2            /usr/bin/python3.7   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 2

Install pip

검색을 해보면 어떤 포스트의 경우 여기에서 sudo apt install python3-pip로 pip를 업데이트할 수 있다고 가이드하고 있다. 하지만, 18.04버전에서는 9.0 이상으로 pip가 올라가지 않는다. 아래와 같이 하면 최신 판본(이 글을 쓰는 시점에서는 20.0.2)으로 업그레이드가 가능하다.

~$ sudo apt-get purge python-pip # pip가 깔려 있을 경우 실행 
~$ wget https://bootstrap.pypa.io/get-pip.py
~$ sudo python get-pip.py
~$ rm get-pip.py

아래와 같이 나와주면 일단 준비 완료다.

~$ pip --version
pip 20.0.2 from /usr/local/lib/python3.7/dist-packages/pip (python 3.7)

venv

만일 가상 환경을 쓰고 싶다면, 아래와 같이 venv를 설치해서 쓰면 되겠다. venv는 python 3.3 이후에 파이썬에 내장된 자체 가상 환경이다. condavirtualenv 같은 걸 써도 무방하겠다.

~$ sudo apt install python3.7-venv
#(가상환경을 모아둘 폴더로 이동. 없다면 하나 만들어라.)
~$ python -m venv |your-venv|
~$ source |your-venv|/bin/activate 
# 해당 디렉토리까지 이동해서 source 명령을 실행해도 된다. 
  • 가상환경을 만들 때, 즉 python -m venv...에서 sudo를 안 쓰게 좋다. 이렇게 가상환경을 만들면 해당 디렉토리가 root의 소유가 된다. VS code 등이 해당 디렉토리에 접근해 변형할 수 없게 된다. 요컨대, 작업이 불편해진다.
  • 만일 home/.pyvenv 아래 pandas라는 환경을 깔았다면,
~$ source ~/.pyvenv/pandas/bin/activate

웬만하면 가상 환경의 이름은 ~/.pyvenv로 설정하자. 가상 환경을 활성화할 경우 pip를 다시 업데이트해줘야 한다. 가상환경은 독립된 환경이고 애초에 생성된 pip 버전을 따르게 된다. 가상 환경 내에서 pip 업데이트는 아래와 같이 하면 된다.4

~$ (|your-venv|) pip install --upgrade pip

정신 건강을 위해서 python 개발에 필요한 필수 패키지도 같이 설치해두도록 하자.

~$ (|your-venv|) sudo apt-get install python3.7-dev

pip-review

conda처럼 편리한 패키지 업데이트가 필요하다면 이 녀석을 설치하도록 하자.5

~$ pip install pip-review 

패키지 상태만 보려면,

~$ pip-review

모든 것을 다 업데이트 하려면,

~$ pip-review --auto
... <pip install output>

각 패키지 별로 문답식으로 진행하려면,

~$ pip-review --interactive
  • 만일 가상환경 내에서 pip-review가 필요하다면, 각 가상환경 내에 깔아야 한다는 점 역시 기억하자.

Connect to VS code

이제 우분투 18.04를 설치하고 파이썬까지 잘 설치했다. 하지만 코딩은 어떻게 하지? 우분투에 VS Code를 깔아야 할까? 그런데 현재 설치한 우분투는 GUI가 없는 버전이니까 X-Windows 같은 것을 깔아야 할까? 걱정할 필요 없다! 윈도에 깔린 VS Code를 그대로 쓰면 된다.

VS Code의 extension 중에서 Remote - WSL이란 것이 있다. 이 녀석을 깔면 WSL에 VS Code가 쉽게 접근할 수 있게 된다.

VS Code 창 아래 왼쪽에 녹색 바를 클릭하면 WSL에 연결할 수 있게 된다.

이렇게 WSL에 접속하면 별도의 창이 뜬다. 이는 윈도의 VS Code와 별도의 환경에서 운용된다. 파이썬의 가상 환경을 생각하면 된다. 필요한 익스텐션 역시 다시 깔아줘야 한다.

파이썬 가상 환경을 쓰는 경우 해당 가상 환경에 접근할 수 있어야 한다. 그래야 가상 환경에서 구동되는 파이썬을 쓸 수 있다.

  • 파이썬 VS Code 익스텐션을 설치한다.
  • VS Code의 메뉴에서 FilePreferencesettings
  • “python:Pythonpath”로 검색한 후 아래를 브라우징하다보면, “Venv path”라는 항목이 나온다. 만일 conda와 같은 다른 가상 환경을 쓴다면 해당 항목에 찾아서 적당한 디렉토리를 넣으면 되겠다.
    • 가상 환경이 이름이 WSL의 Home에 “.pyvenv”라면, ~/.pyvenv가 된다.

  • 여기까지 마쳤으면 WSL에 접근된 상태에서 WSL에 깔린 파이썬 가상 환경으로도 접근이 가능하다. 해당 python 커널을 인식해주자. 아래 그림에서 왼쪽의 보라색을 선택하자. venv가 제대로 인식되었다면 시스템에 설치된 python 버전 뿐 아니라 venv 상의 버전들도 아래 그림처럼 VS Code에서 잘 보일 것이다.

  • 이제 확장자 *.py 혹은 *.ipynb 파일을 불러오면, VS Code가 자신의 환경에서 파이썬을 구동하는 데 필요한 프로그램을 자동으로 깐다. 그냥 깔게 두면 된다.6

이후 VS Code를 이용해 필요한 파일을 불러와도 되고, 아니면 Cmder 창에서 아래와 같이 실행하자.

code |your-working-python-file.py|

실행하면 윈도에 구동되는 VS Code 위에서 WSL 내의 파일들이 뜬다. 편하게 작업할 수 있다.

How to access Windows folder

잠깐. 나의 작업 파일은 윈도에 있는데? WSL이 이런 상황에 대응하지 않았을리가 있는가! /mnt/c... 와 같은 식으로 /mnt 안에 윈도 드라이브들이 마운트되어 있다. 예를 들어 github 폴더가 윈도에 있다면 이런 방식으로 접근하면 된다.

WSL의 또다른 장점은 리눅스 내에서 윈도 어플리케이션이 실행된다는 것이다. 예를 들어 WSL 버전을 확인하고 싶다면 아래를 실행하면 된다.

wsl.exe -l -v

VS Code를 그대로 bash 안에서 실행할 수도 있다.

code . # VS Code 실행 
code |any-your-file| # 특정 파일을 VS Code에서 실행 

github

깃헙의 재설정이 필요할 수 있다.

 ~$ git config --system --unset credential.helper 

우선, 저장된 아이디와 패스워드를 풀자.

그리고 여기를 참고해서 다시 크리덴셜을 받아 다시 로그인한다. 만일 아이디와 패스워드를 저장하고 싶다면, 아래 명령을 먼저 수행한 후 로그인하면 된다.

~$ git config credential.helper store 

tensorflow

혹시 tensorflow를 쓰게 된다면 인스톨할 때 한 가지만 주의하면 된다.

  • WSL은 아직 gpu를 지원하지 못한다.
  • tensorflow 2.1부터는 디폴트로 gpu 버전이 들어 있다.
  • 따라서 cpu 버전을 골라서 인스톨해야 한다.
pip install tensorflow-cpu

Why…

사실 그냥 윈도에서 파이썬 깔아서 써도 문송한 내 수준에서는 충분하다. 다만 pandas 패키지를 몇 배 빠르게 돌릴 수 있다는 modin 프로젝트의 ray가 리눅스와 macos에서만 돌아가더라. 이것 때문에 맥북을 살 수는 없는 노릇 아닌가… 마.

References

  1. WSL 2의 경우 올해 4월 쯤 정식으로 서비스될 예정이다. Windows 10 Preview 프로그램에 가입하면 미리 써볼 수 있다. 상세한 내용은 여기를 참고하라. WSL에서 버전을 확인하고 싶다면 wsl.exe -l -v을 치면 된다. 

  2. WSL 2에 관해서는 이 포스팅을 참고하라. 

  3. https://codechacha.com/ko/change-python-version/ 

  4. 대체로 파이썬 가상 환경의 경우 가상 환경 안에 필요한 모든 구동 파일을 지니고 있다. 따라서 pip 같은 경우도 다시 업데이트하는 것이 필요하다. 시스템 파이썬의 pip와 다르기 때문이다. 

  5. 여기에서 패키지에 관해 상세히 알 수 있다. 

  6. 설치 항목은 VS Code 상의 코드를 파이썬으로 밀어 넣는 linter 그리고 Jupyter를 구동하는 데 필요한 여러가지 파이썬 패키지들이다.