超初心者でもわかるPyenv, Pipenv環境構築

先日、研究室から拝借したMacBookAirをようやくセッティングする時間ができたので
やっていこうと思います。

使用PC：MacBook Air (Retina, 13-inch, 2020)
メモリ：8 GB 3733 MHz LPDDR4X
プロセッサ：1.1 GHz デュアルコアIntel Core i3

<u>ゴール：Pyenv, Pipenvを適切にインストールする。</u>
## そもそもPyenv, Pipenvって何

### Pyenv 
指定したバージョンのpythonのインストール、及び利用したいバージョンのpythonへの切り替えをするバージョン切り替えツール

### Pipenv
Pythonで開発を行う際に、プロジェクトごとにパッケージ管理や仮想環境構築を行うパッケージングツール

## 1. Xcodeのインストール
XcodeがないとHomebrewがインストールできません。
（正確にはできるらしいですが、こっちの方がややこしくないかと）
App storeでXcodeのインストールをしました。
まあまあ時間がかかりますが耐えましょう（涙）
![スクリーンショット 2021-02-06 22.10.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086700/996640cb-7a70-8d68-1ee7-a10495bb2756.png)




## 2. Homebrewのインストール
```
~ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
これを実行しましょう。
（公式サイト：https://brew.sh/index_ja）
良い子は公式サイトからコピペしよう！
これもだいぶ実行時間が長いので漫画を読みながら気長に待ちましょう。
## 3. Pyenvのインストール
ようやく本題。
と言ってもインストールは楽勝

```
~ brew install pyenv
```

これだけ。実行時間も数十秒。
インストールの確認もこれだけ。

```
~ pyenv --version
pyenv 1.2.22
``` 
pyenv ○.○.○ってでればOK
試しにインストールしてみよう。

```
~ pyenv install --list
```
と打てば、インストールできるpythonの候補がずらっと出てきます。
適当に今回は3.8.7を選択。

```
~ pyenv install 3.8.7
```
インストール完了！
早速バージョンをきりかえてpythonを動かしてみようということで以下を実行

```
# 現在のpythonのバージョンを確認(systemはデフォルトのpythonのバージョン)
~ pyenv versions
* system
  3.8.7

# システム全体のpythonのバージョンを変更
~ pyenv global 3.8.7

~ pyenv versions
 system
* 3.8.7 
```
よし。変更完了。あとは実行やでーと思ったがしかし、問題発生。

```
~ python --version
python --version
Python 2.7.16
```
#### あれれ、、
これは困った。pythonのコマンドがpyenvのやつで反映されていません。デフォルト(system)のままです。
これの原因はパスが原因でした。pyenvのパスが優先されていませんでした。なので
<b>パスを通します！！！</b>

（パスを通す？？？？となってしまった人は【[Pathを通すとは](https://qiita.com/soarflat/items/09be6ab9cd91d366bf71)】の記事を読むと完全に理解できます。僕も読み直しました。）

```
# .pyenvディレクトリのどこにpythonがあるかを確認
~ ls .pyenv/shims
2to3             easy_install     idle             idle3.8          pip3             pydoc            pydoc3.8         python-config    python3-config   python3.8-config
2to3-3.8         easy_install-3.8 idle3            pip              pip3.8           pydoc3           python           python3          python3.8        python3.8-gdb.py

#.zshrcに書き込み
~  echo 'export PYENV_ROOT="$HOME/.pyenv"' >> .zshrc
~  echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> .zshrc

#.zshrcの変更を反映
~  source .zshrc
```
これでパス通すの完了！
シェルがzshじゃなくてbashの人は```.zshrc -> .bash_profile```
で読み替えてくださいな。

さあこれで行けるはず。

```
~ python --version
Python 3.8.7
```
パパパパーンパーパーパッパパーン(FF風)
勝ちました。これでようやくpyenvのインストール完了です。

## 4. Pipenvのインストール

これだけです。

```
# インストール
brew install pipenv

# インストールできているかの確認
~ pipenv --help
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
  --where                         Output project home information.
  --venv                          Output virtualenv information.
  --py                            Output Python interpreter information.
  --envs                          Output Environment Variable options.
  --rm                            Remove the virtualenv.
  --bare                          Minimal output.
  --completion                    Output completion (to be executed by the
                                  shell).

  --man                           Display manpage.
  --support                       Output diagnostic information for use in
                                  GitHub issues.

  --site-packages / --no-site-packages
                                  Enable site-packages for the virtualenv.
                                  [env var: PIPENV_SITE_PACKAGES]

  --python TEXT                   Specify which version of Python virtualenv
                                  should use.

  --three / --two                 Use Python 3/2 when creating virtualenv.
  --clear                         Clears caches (pipenv, pip, and pip-tools).
                                  [env var: PIPENV_CLEAR]

  -v, --verbose                   Verbose mode.
  --pypi-mirror TEXT              Specify a PyPI mirror.
  --version                       Show the version and exit.
  -h, --help                      Show this message and exit.
```
これで完了。
おしまい、と言いたいところだけどあまりにもあっけないので軽く動作確認。

```

# サンプルのディレクトリ作成
~ mkdir sample
~ mkdir sample2

~ pyenv versions
  system # system = 2.7.16
* 3.8.7

~ cd sample

# 仮想環境の構築・有効化
sample pipenv shell

# 仮想環境内のpythonのバージョン確認
(sample) ➜  sample python -V
Python 3.8.7

# 仮想環境から抜ける
(sample) ➜  sample exit
(sample) ➜  sample cd ../sample2

# 
sample2 pyenv local system
sample2 pyenv versions
* system
  3.8.7

# 仮想環境の構築・有効化
sample2 pipenv shell --python 2.7.16

# 仮想環境ないのpythonのバージョン確認
(sample2) ➜  sample2 python --version
Python 2.7.16
```

これでディレクトリごとに異なるpythonのバージョンをもつ仮想環境の構築ができたze
```pipenv shell --python 2.7.16```
の行は``` --python 2.7.16```をつけないと、globalのバージョン(3.8.7)で仮想環境が構築されてしまうので必ず記述する事。

また、インストールしていないpythonのバージョンをしていない場合は、pyenvが勝手にインストールしてくれます。優しいね！


## あとがき
そもそもHomebrew使わないで環境整える方法もあるらしい！
けれど煩雑そうなのでひとまずこれで。

今回これらの記事を参照しました。圧倒的感謝です。
ではでは

・[Pathを通すとは](https://qiita.com/soarflat/items/09be6ab9cd91d366bf71)
・[PATHを通すために環境変数の設定を理解する (Mac OS X)](https://qiita.com/soarflat/items/d5015bec37f8a8254380)
・[macOSにHomebrewをインストール](https://qiita.com/pypypyo14/items/4bf3b8bd511b6e93c9f9)
・[Pyenv, Pipenvを利用したプロジェクト構築](https://www.wakuwakubank.com/posts/255-python-pipenv-pyenv/)