【pyenv/pipenv】MacでPythonを使おう

# MacでPythonを扱う1つの方法

## はじめに

初めてMacを買ってPythonを導入するのに迷ったので、備忘録ついでに書き残します。

## アジェンダ

- Homebrewの導入
- zshの導入
- pyenvの導入
- pipenvの導入

## Homebrewの導入

### Homebrewとは？

Mac用のパッケージ管理システム
> Homebrew（ホームブルー）は、macOSオペレーティングシステム（およびLinux）上のパッケージ管理システムのひとつである[1]。同じくmacOSのためのMacPortsやFinkと同様の目的と機能を備え、利用が広がりつつある。LinuxのDebianのAPTに似た使用感である。Max Howellによって開発された。

[Wikipedia(Homebrew (パッケージ管理システム))](https://ja.wikipedia.org/wiki/Homebrew_(%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0))より抜粋

よくわからんけど、便利なパッケージを探して→Macにインストールして→バージョン管理もしてくれるスグレモノらしい。
その程度の認識。。。


ちなみに、Brewは（ビールの）醸造って意味らしく、Homebrewで自家醸造となるらしい。
自分の好みで使ってくれ、ってことかな？


### Homebrew導入
[Homebrew 公式](https://brew.sh/index_ja)
下記コマンドを実行してください、とのこと。

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

するとなにやら色々と裏で実行されて、Homebrewがインストールされます。
インストールされたことを確認するために下記コマンドを実行しましょう。

``` terminal
$ brew --version
Homebrew 2.1.9
Homebrew/homebrew-core (git revision bb5f; last commit 2019-08-08)
Homebrew/homebrew-cask (git revision a705d8; last commit 2019-08-08)
``` 
のように表示されるはずです。
これで、Homebrewの導入は完了。

## zshの導入

### zshとは？

正式名称は Z Shell

> - プログラム可能な補完機能によって、多くのユーザーコマンドのオプションや引数を打つのを支援する（インストールの時点で数百のコマンドをサポートしている）。
- ユーザーの起動している全ての zsh でコマンド履歴を共有することができる。
- 拡張ファイル名生成（ワイルドカード展開）によって find のような外部コマンドを呼び出さないで、ファイル名を展開する。
- 変数や配列の処理が改善されている。
- 複数行コマンドをバッファーで編集できる。
- 綴り字修正機能
- 様々な互換モードがある。例えば、zshをshとして実行したとき、bashの振りをするようにできる。
- プロンプトテーマ
- 端末の右端に情報を表示し長いコマンドを打っているときは自動的に隠れる右プロンプトを表示できる。
- 殆ど全部のカスタマイズが可能。


[Wikipedia(Z Shell)](https://ja.wikipedia.org/wiki/Z_Shell)より抜粋

なにやら色々と便利で自由にカスタマイズ出来るところが人気らしい。
なお私は使いこなせていないもよう。

### zsh導入

先程インストールしたHomebrewを使い、Zshをインストールする。

``` terminal
$ brew install zsh
```

これで、Homebrewが管理をしつつ、パッケージをインストールすることができた。
インストールされたかを確認するために、下記コマンドを実行しよう。

``` terminal
$ zsh --version
zsh 5.7.1 (x86_64-apple-darwin18.2.0)
```

のように表示されるはず。

しかし、Shell自体は勝手に変更されることはないので、前準備を行う。
まず、HomebrewでインストールしたZshをMacが認識するように、``` /etc/Shells ```の内容を書き換える

``` Shells:/etc/Shells
List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/zsh （← これを追記）
```
その後に、下記コマンドを実行してからTerminalを再起動する。

``` terminal
$ chsh -s /usr/local/bin/zsh
```
これでZshの導入も完了。

## Pyenvの導入

### Pyenvとは

複数のPythonを管理できるライブラリ。
大きな括りでいえば、Python3系とPython2系を両立させたいとか、Anacondaも使いたいとかのニーズに答えて、Pythonのバージョン管理を楽にしてくれるライブラリ。

### Pyenvの導入とPythonのインストール

例によってHomebrewから。

``` zsh
$ brew install pyenv
```

次にPythonをインストールします。

``` zsh
$ pyenv install --list
```
で必要なPythonのバージョンを探します。

で、見つかったら

``` zsh
$ pyenv install x.x.x.
```
でインストール
でもまだインストールしただけなので、全体に認識させる必要があります。

なので下記コマンドを実行します。

``` zsh
pyenv global x.x.x
```

これで全体が指定したPythonのバージョンを利用するようになります。

## pipenvの導入

### pipenvとは
> Pythonプロジェクトのための仮想環境を作成するために必要なすべての手段を提供するツールです。パッケージをインストールまたはアンインストールするときに Pipfile ファイルを介して自動的にプロジェクトパッケージを管理します。

[Pycharm](https://pleiades.io/help/pycharm/pipenv.html)より抜粋
pipに仮想環境の機能をつけたようなもの（暴論）

### pipenv導入
Homebrewから。

``` zsh
$ brew install pipenbv
```

インストール後、任意の開発フォルダを作成し、移動します。
移動先のフォルダで下記コマンドを実行します。

```zsh
$ pipenv install

$ pipenv shell
```
これで仮想環境ができました。

あとはライブラリをインストールするだけです。

``` zsh
pipenv intall 'ライブラリ名'
```

でライブラリが
インストールされ、内容が```Pipfile```と```Pipfile.lock```に書き込まれます。

これPythonの仮想環境作成が完了しました。
自分はここまでやるのに結構な時間かかりましたが。。。。


誤りあればご指摘ください。