MacでanyenvをつかってPython環境構築(bash、fish対応)

これは[cloudpack あら便利カレンダー 2018](https://benri2018.rnd.cloudpack.jp/)の記事です。

## 概要

```brew install python3``` というのが手っ取り早いわけですが、今後を見越して、バージョン切り替えができる環境にします。python2.xがそう簡単に廃れると思わないほうがよいです。きっと。たぶん。

```brew``` なにそれ？という方は下記を参考ください。

5分でできるMacBook Proに最低限の開発環境構築
https://qiita.com/kai_kou/items/3107e0a056c7a1b569cd


## 手順

- シェル: fish
- ＊bashの手順も併記してます。

fishはいいぞぉ

fish-shell でシェルの海をスイスイ泳いでみた
https://nulab-inc.com/ja/blog/backlog/fish-shell-tutorial/


### 作業前の状態

```sh:fish、bash共通
# macOS Sierra
> sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G1510

# Macには2.7が最初からインストールされている
> python --version
Python 2.7.10
> which python
/usr/bin/python

# まだ入ってない
> anyenv
fish: Unknown command 'anyenv'
> pyenv
fish: Unknown command 'pyenv'
```

### anyenvのインストール

Mac に anyenv でサクッとマルチ開発環境構築
https://qiita.com/yutackall/items/6c48cf56317d8501f6df

>anyenv とは、ざっくり言うと、rbenvとか、nbenvとか複数バージョンをインストールできる **env系をまとめて管理できるツール。

です。個別にインストールするとあとで泣くことになるので、anyenvオススメです。

```sh:fish
> echo 'set -x PATH $HOME/.anyenv/bin $PATH' >> ~/.config/fish/config.fish

# fishだとevalがハマりどころ(1敗)
> echo 'eval (anyenv init - | source)' >> ~/.config/fish/config.fish
# シェルの再起動(exec $SHELL -l じゃむり)
> exec fish -l
```


```sh:bash
> git clone https://github.com/riywo/anyenv ~/.anyenv
> echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
> echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
> exec $SHELL -l
```

これでanyanvが使えるようになるはず。

```sh:fish、bash共通
> anyenv
anyenv
Usage: anyenv <command> [<args>]
(略)
anyenv versions
```
はい。

プラグインも入れておきます。

anyenvの*envたちを一括でアップデートする
https://qiita.com/sawadashota/items/825002d84088c0129c4b

```sh:fish、bash共通
> git clone https://github.com/znz/anyenv-update.git "$(anyenv root)/plugins/anyenv-update"

# fishの場合「$」があると
# 「fish: $(...) is not supported.」って怒られるのでこっち。

> git clone https://github.com/znz/anyenv-update.git (anyenv root)/plugins/anyenv-update
```

まだなにも*envをいれてないけど動作確認

```sh:fish、bash共通
> anyenv update
Updating 'anyenv'...
Updating 'anyenv/anyenv-update'...
```
はい。

### pyenvのインストール

```sh:fish、bash共通
# 初回はenvsフォルダがないって怒られるので
> mkdir ~/.anyenv/envs

> anyenv install pyenv
Install pyenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.

# シェルの再起動: bash
> exec $SHELL -l

# シェルの再起動: fish
> exec fish -l
```

これでpyenvがインストールされたはず。

```sh:fish、bash共通
> pyenv
pyenv 1.2.6
```
はい。

### Pythonのインストール

お好きなバージョンのpythonをインストールしましょう！

```sh:fish、bash共通
# インストール可能なバージョンを確認
> pyenv install -l
Available versions:
  2.1.3
  2.2.3
  (たくさんでてくる)

# 指定のバージョンをインストール
> pyenv install 3.6.6
(略)
Installed Python-3.6.6 to ~/.anyenv/envs/pyenv/versions/3.6.6

> pyenv versions
* system (set by ~/.anyenv/envs/pyenv/version)
  3.6.6

> pyenv local 3.6.6
> python --version
Python 3.6.6
```
はい。

### 仮想環境を作って入る

仮想環境はAnacondaを使うのもありなのですが、Python 3.3からvirtualenvが標準機能として組み込まれたようなので、venv+pipもあり。お好みで。

```sh:fish、bash共通
> mkdir ~/hoge
> cd ~/hoge
> python -m venv hoge
```

```sh:fish
# fish用のactivateがある！
> . hoge/bin/activate.fish
```

```sh:bash
> . hoge/bin/activate
```
```sh:fish、bash共通
> . hoge/bin/activate
> which pip
~/hoge/hoge/bin/pip
> deactivate
```

はい。

それでは、よきPython開発ライフを^^


## 参考

fish-shell でシェルの海をスイスイ泳いでみた
https://nulab-inc.com/ja/blog/backlog/fish-shell-tutorial/

riywo/anyenv
https://github.com/riywo/anyenv

Mac に anyenv でサクッとマルチ開発環境構築
https://qiita.com/yutackall/items/6c48cf56317d8501f6df

anyenvの*envたちを一括でアップデートする
https://qiita.com/sawadashota/items/825002d84088c0129c4b

fish shell の時に プロセスを起動し直す
http://hotoolong.hatenablog.com/entry/2018/05/07/194938

fishでのevalの設定方法
https://ema-hiro.hatenablog.com/entry/20170523/1495519890

venv: Python 仮想環境管理
https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e

Anaconda で Python 環境をインストールする
https://qiita.com/t2y/items/2a3eb58103e85d8064b6

activate.fish $(...) is not supported. In fish, please use '(.env)'. #1030
https://github.com/pypa/virtualenv/issues/1030