# 환경설정

## Homebrew 설치하기 \[[페이지 바로가기](https://brew.sh/index_ko.html)]

homebrew는 macOS용 패키지 관리자이다.

```
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

## Python 설치하기

`install` 이나 `upgrade` 전에는 homebrew를 최신버전으로 유지해준다.

```
$ brew update
```

### pyenv 설치

pyenv는 local환경에서 python의 여러 버전을 설치할 수 있게 해준다. 즉, python 버전 관리 시스템이다.

```
$  brew install pyenv
```

* `.zshrc` 파일 설정

```
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc
$ source ~/.zshrc
```

* 설치된 파이썬 버전확인

```
$ pyenv versions
* system (set by /Users/jeongdaye/.pyenv/version)
```

* 설치할 수 있는 python 버전확인

```
$ pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  2.4.2
...
```

* 특정 버전의 python 설치

```
$ pyenv install 3.7.2
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.2.tar.xz...
-> https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
Installing Python-3.7.2...
python-build: use readline from homebrew
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-3.7.2 to /Users/jeongdaye/.pyenv/versions/3.7.2
```

이때 [다음과 같은 오류](https://dahye-jeong.gitbook.io/django/django#error)가 발생할 수 있다. 아래와 같이 오류를 해결해준 후 다시 명령어를 실행하면된다.

* global 설정

```
$ pyenv global 3.7.2
```

터미널을 종료 후 다시 시작하면 python의 version이 3.7.2로 바뀐 것을 확인할 수 있다.

```
$ python
Python 3.7.2 (default, Mar  4 2019, 17:24:35)
[Clang 10.0.0 (clang-1000.10.44.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

### zlib 오류발생 <a href="#error" id="error"></a>

```bash
BUILD FAILED (OS X 10.14.2 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/02/dsdr2ndd5jj8p8h5vpw3_n300000gn/T/python-build.20190217200742.23725
Results logged to /var/folders/02/dsdr2ndd5jj8p8h5vpw3_n300000gn/T/python-build.20190217200742.23725.log

Last 10 log lines:
  File "/private/var/folders/02/dsdr2ndd5jj8p8h5vpw3_n300000gn/T/python-build.20190217200742.23725/Python-3.7.2/Lib/ensurepip/__main__.py", line 5, in <module>
    sys.exit(ensurepip._main())
  File "/private/var/folders/02/dsdr2ndd5jj8p8h5vpw3_n300000gn/T/python-build.20190217200742.23725/Python-3.7.2/Lib/ensurepip/__init__.py", line 204, in _main
    default_pip=args.default_pip,
  File "/private/var/folders/02/dsdr2ndd5jj8p8h5vpw3_n300000gn/T/python-build.20190217200742.23725/Python-3.7.2/Lib/ensurepip/__init__.py", line 117, in _bootstrap
    return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/private/var/folders/02/dsdr2ndd5jj8p8h5vpw3_n300000gn/T/python-build.20190217200742.23725/Python-3.7.2/Lib/ensurepip/__init__.py", line 27, in _run_pip
    import pip._internal
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
```

* zlib 설치

```
$ brew install zlib
```

```
$ vim ~/.zshrc
# For compilers to find zlib you may need to set:
export LDFLAGS="-L/usr/local/opt/zlib/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include"

# For pkg-config to find zlib you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"
```

```
$ source ~/.zshrc
```

## 가상환경(Virtual Environment) 설정하기

Virtual Environment를 줄여서 *virtualenv* 라고한다. virtualenv 는 시스템에 설치된 파이썬에 영향을 주지 않고 파이썬의 가상 환경을 유지할 수 있도록 해준다. 가상 환경에서는 파이썬 실행파일, 라이브러리 설치 장소 등이 따로 제공되며, 이 곳에 패키지를 설치해도 시스템의 파이썬이나 다른 가상 환경에는 영향을 주지 않도록 설계되어 있다.

### pyenv-virtualenv 설치

```
$  brew install pyenv-virtualenv
```

```
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc    
$ source ~/.zshrc
```

### 가상환경 만들기

```
$ pyenv virtualenv <version> <env_name>
```

```
# example
# python 3.7.2 version인 sample-env라는 이름의 가상환경 생성
# version을 생략할 경우에는 global로 설정된 버전으로 생성
$ pyenv virtualenv 3.7.2 sample-env
Looking in links: /var/folders/0z/rb_yr2g57cz833kvx98dc3y40000gn/T/tmp5gzn2iis
Requirement already satisfied: setuptools in /Users/jeongdaye/.pyenv/versions/3.7.2/envs/sample-env/lib/python3.7/site-packages (40.6.2)
Requirement already satisfied: pip in /Users/jeongdaye/.pyenv/versions/3.7.2/envs/sample-env/lib/python3.7/site-packages (18.1)
```

### 프로젝트 폴더에 가상환경 지정하기

우선 가상환경을 설정할 프로젝트에 들어간다.

```
$ pyenv activate <env_name>
$ pyenv local <env_name>
```

```
$ pyenv versions
 system
  3.7.2
  3.7.2/envs/sample-env
* sample-env (set by PYENV_VERSION environment variable)
```

위와 같이 sample-env에 \*가 되어있으면 설정이 완료된 것이다.

* 가상환경의 패키지 목록 확인

```
$ pip list
Package    Version
---------- -------
pip        18.1   
setuptools 40.6.2
```

다음과 같이 초기환경에는 `pip` 와 `setuptools` 만 설치되어있다.

### 가상환경 종료하기

```
$ pyenv deactivate
```

## Django 설치하기

설치 전에 우선 pip를 최신버전으로 upgrade 해준다.

```
$ python -m pip install --upgrade pip
```

```
$ pip install Django==2.1.7
```

```
$ pip list
Package    Version
---------- -------
Django     2.1.7  
pip        19.0.2 
pytz       2018.9 
setuptools 40.6.2
```

## 참조 문서

* [pyenv, pyenv-virtulaenv](https://lhy.kr/configuring-the-python-development-environment-with-pyenv-and-virtualenv)
* [python, Django 설치](https://www.imagineer.io/courses/python/lectures/1851488)
* [오류 해결](https://github.com/jiansoung/issues-list/issues/13)
* [virtualenv란](http://www.flowdas.com/blog/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-virtualenv/)
* [Django 설치 - 공식문서](https://www.djangoproject.com/download/)
