MacでPythonの開発環境構築

＃pyenvのインストール

###pyenvとは
pythonのバージョンを簡単に切り替えるて利用できるようにするツールです

###Homebrewでpyenvをインストールする場合
```
% brew install pyenv
```

###gitでpyenvをインストールする場合
```
% git clone git://github.com/yyuu/pyenv.git ~/.pyenv
```

###pyenvを利用する前にターミナルで利用するシェルの確認
```
% echo $SHELL
```
/bin/bash か /bin/zsh が表示される

###bashの場合
```
% vi ~/.bash_profile
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

% source ~/.bash_profile
```

###zshの場合
```
% vi ~/.zshrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

% zsh -l
```

#pyenvでpythonをインストールする

###インストール可能なpythonのバージョンを確認し、インストールする
```
% pyenv install --list
% pyenv install 3.8.3
% pyenv install 3.8.2
% pyenv versions
```
###pythonをインストールしてきた後はshimのリフレッシュをしておく。
```
% pyenv rehash
```

###特定のディレクトリ配下で利用するpythonのバージョンを設定する
```
% pyenv local 3.8.2
% ls -lah
.python-version
% cat .python-version
3.8.2
```

###全体で利用するpythonのバージョンを設定する
```
% pyenv global 3.8.3
```

###バージョンの確認
```
% pyenv version
```

###アンインストール
```
pyenv uninstall 3.8.2
```

#pipの利用

###pipとは
python標準のパッケージはたいていpythonをインストールする時点で
自動的にインストールされます。
サードパーティのパッケージは別途インストールが必要で、
PyPIという下記のサイトで配布されています。
https://pypi.org/
このサードパーティが配布しているパッケージをインストールするために、
pipを使ってパッケージの管理が行います。

###pipのバージョンを確認する
```
% python -m pip list
Package    Version
---------- -------
pip        19.2.3
setuptools 41.2.0
WARNING: You are using pip version 19.2.3, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
```

### pipのバージョンアップ
```
% python -m pip install pip --upgrade
Collecting pip
  Using cached https://files.pythonhosted.org/packages/43/84/23ed6a1796480a6f1a2d38f2802901d078266bda38388954d01d3f2e821d/pip-20.1.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 19.2.3
    Uninstalling pip-19.2.3:
      Successfully uninstalled pip-19.2.3
Successfully installed pip-20.1.1
```

#pipenvの利用

###pipenvとは
Pipenvは、Python公式が正式に推薦する依存関係管理・パッケージングのためのツールです。

###pipenvのインストール
```
% pip install pipenv
```

###pipenvの利用方法

####プロジェクト「project1」を作成する
```
% mkdir /develop/python/tutorial/project1
% cd /develop/python/tutorial/project1
```

####プロジェクトでpython3.8.3を利用するとする
```
% pipenv --python 3.8.3
% ls -lah
 Pipfile
```

####numpyパッケージをインストールする
```
% pipenv install numpy
% ls -lah
 Pipfile
 Pipfile.lock
```

####Pipfileに利用するパッケージの情報が書かれている
```
% cat Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
numpy = "*"

[requires]
python_version = "3.8"
```

####Pipfile.lockにインストール済みパッケージの詳細が書き込まれる
```
% cat Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "b59842a2e4aca58430e4c67380e4d495bd0cb8b31d65c29e51235c48f9456e4b"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.8"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "numpy": {
            "hashes": [
                "sha256:13af0184177469192d80db9bd02619f6fa8b922f9f327e077d6f2a6acb1ce1c0",
                "sha256:26a45798ca2a4e168d00de75d4a524abf5907949231512f372b217ede3429e98",
                "sha256:26f509450db547e4dfa3ec739419b31edad646d21fb8d0ed0734188b35ff6b27",
                "sha256:30a59fb41bb6b8c465ab50d60a1b298d1cd7b85274e71f38af5a75d6c475d2d2",
                "sha256:33c623ef9ca5e19e05991f127c1be5aeb1ab5cdf30cb1c5cf3960752e58b599b",
                "sha256:356f96c9fbec59974a592452ab6a036cd6f180822a60b529a975c9467fcd5f23",
                "sha256:3c40c827d36c6d1c3cf413694d7dc843d50997ebffbc7c87d888a203ed6403a7",
                "sha256:4d054f013a1983551254e2379385e359884e5af105e3efe00418977d02f634a7",
                "sha256:63d971bb211ad3ca37b2adecdd5365f40f3b741a455beecba70fd0dde8b2a4cb",
                "sha256:658624a11f6e1c252b2cd170d94bf28c8f9410acab9f2fd4369e11e1cd4e1aaf",
                "sha256:76766cc80d6128750075378d3bb7812cf146415bd29b588616f72c943c00d598",
                "sha256:7b57f26e5e6ee2f14f960db46bd58ffdca25ca06dd997729b1b179fddd35f5a3",
                "sha256:7b852817800eb02e109ae4a9cef2beda8dd50d98b76b6cfb7b5c0099d27b52d4",
                "sha256:8cde829f14bd38f6da7b2954be0f2837043e8b8d7a9110ec5e318ae6bf706610",
                "sha256:a2e3a39f43f0ce95204beb8fe0831199542ccab1e0c6e486a0b4947256215632",
                "sha256:a86c962e211f37edd61d6e11bb4df7eddc4a519a38a856e20a6498c319efa6b0",
                "sha256:a8705c5073fe3fcc297fb8e0b31aa794e05af6a329e81b7ca4ffecab7f2b95ef",
                "sha256:b6aaeadf1e4866ca0fdf7bb4eed25e521ae21a7947c59f78154b24fc7abbe1dd",
                "sha256:be62aeff8f2f054eff7725f502f6228298891fd648dc2630e03e44bf63e8cee0",
                "sha256:c2edbb783c841e36ca0fa159f0ae97a88ce8137fb3a6cd82eae77349ba4b607b",
                "sha256:cbe326f6d364375a8e5a8ccb7e9cd73f4b2f6dc3b2ed205633a0db8243e2a96a",
                "sha256:d34fbb98ad0d6b563b95de852a284074514331e6b9da0a9fc894fb1cdae7a79e",
                "sha256:d97a86937cf9970453c3b62abb55a6475f173347b4cde7f8dcdb48c8e1b9952d",
                "sha256:dd53d7c4a69e766e4900f29db5872f5824a06827d594427cf1a4aa542818b796",
                "sha256:df1889701e2dfd8ba4dc9b1a010f0a60950077fb5242bb92c8b5c7f1a6f2668a",
                "sha256:fa1fe75b4a9e18b66ae7f0b122543c42debcf800aaafa0212aaff3ad273c2596"
            ],
            "index": "pypi",
            "version": "==1.19.0"
        }
    },
    "develop": {}
}
```

####開発環境用のパッケージをインストールする
```
$ pipenv install --dev ptvsd pytest
```

####パッケージをアップデートする
```
$ pipenv update pytest
```

####パッケージをアンインストールする
```
$ pipenv uninstall --all
```

####開発用のパッケージのみアンインストールする
```
$ pipenv uninstall --all-dev
```

###PipfileとPipfile.lockの再利用

####Pipfileの利用
Pipfileをもとにパッケージをインストールします。
このときにインストールした内容でPipfile.lockが更新されます．

```
$ pipenv install
```

####開発用のパッケージもインストールしたい場合は--devをつける
```
$ pipenv install --dev 
```

####Pipfile.lockの利用
Pipfile.lockをもとにパッケージをインストールします。

```
$ pipenv sync
```

####開発用のパッケージもインストールしたい場合は--devをつける
```
$ pipenv sync --dev 
```