# 환경설정

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

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

```shell
$ /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/vue-js/master-2/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/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dahye-jeong.gitbook.io/vue-js/master-2/django/basic/2019-02-17-install.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
