【初心者向け】Pythonとjupyterの環境構築手順2021年版（Mac編）

# 前提

- 本記事は**Mac**ユーザーが対象となりますが、M1搭載のMacについては未だ未知数なことも多いため対象外です。anacondaは問題なく動作するそうです。
- デフォルトの状態のMacから環境構築していきます。bashではなくzshの人などは適宜、読み替えてください。
- windowsもそのうち書きます。 

# はじめに
Mac上にPythonでのデータ分析環境を整えることを目的とします。
ひとまず、MacにPython3系をインストールしてJupyter Notebookで作業できるようにすることを目標にします。Jupyter Notebookとは、ブラウザ上で動作するPythonの対話型実行環境です。
以下の2種類の方法を紹介します。

- 手っ取り早く始めたい方向け
- 長く使い続けたい方向け

# 手っ取り早く始めたい方へ
手っ取り早く始めた方は、AnacondaさえインストールしてしまえばOKです。
Pythonそのものとよく使われるライブラリを一括で管理できるパッケージです。これを入れておくとひとまず必要なモノはすべてそろうので、**ある意味**オススメではあります。
ただ、Anacondaというものは、Python環境をそれひとつで形成しきってしまっているため、その外部のことをやろうとすると、途端に難しくなります。（筆者の感想も入ってます）
あと重い...。

検索すると様々な記事が出てきますが、公式がおすすめなので[こちら](https://docs.continuum.io/anaconda/install/mac-os/)を参考に
インストールしてみましょう。

#長く使える環境を作りたい方へ
なるべく開発環境が汚れないような構成にしつつ、不要なモノを使わないように構築していきます。
poetryだけでも十分強力なので、anyenvとpyenvのインストールはとばしても構いません。


## Homebrewのインストール
これは必須です。
Homebrewの公式ページは[こちら](https://brew.sh/index_ja)
アプリケーションの中からターミナル（黒い画面に文字が書いてあるアレです）
を用意して、スクリプトを貼り付けて実行してください。

```terminal:ターミナル
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571279/91cf92d0-6ef2-ef1f-0cdc-f30f2bb8c80f.png)

## anyenvのインストール(とばしてもいい)
**env系のツールをまとめて管理できます。後にJavascriptやRubyを使いたくなったときにも、バージョン管理ツールを管理できるので入れておくことをおすすめします。
公式は[こちら](https://github.com/anyenv/anyenv)

```terminal:ターミナル
$ brew install anyenv
$ echo 'eval "$(anyenv init -)"' >> ~/.zshrc
$ anyenv init
$ exec $SHELL -l
$ anyenv install --init
```

## pyenvのインストール
何かと便利なので紹介します。
Pythonそのものバージョン管理に使います。

```terminal:ターミナル
$ anyenv install pyenv

or

# anyenvをinstallしなかった人は
$ brew install pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
#　適用
$ source .bash_profile
```

続いて好きなバージョンのPythonを入れます。

```terminal
$ pyenv install -l
```
でインストール可能な一覧が出てきます。
おすすめは3.6~3.8くらい。
その後、インストールしたいバージョンを指定して実行(以下の例はpython3.7.5)

```terminal
$ pyenv install 3.7.5
```
あとは環境を適用させるだけです。

```terminal:ターミナル
# PC全体に適用させたい場合
$ pyenv global 3.7.5

#ディレクトリ下だけの場合
$ pyenv local 3.7.5
```

## poetryのインストール
Pythonのモジュール管理を行います。
公式ドキュメントは[こちら](https://python-poetry.org/)
日本語もありました。[こちら](https://cocoatomo.github.io/poetry-ja/)

```terminal:ターミナル
$ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
```

```terminal:ターミナル
$ echo '$HOME/.poetry/bin:$PATH' >> ~/.bashrc
#zshの場合これだけだとエラーする可能性があります。その場合は以下のコマンド
$ echo '$export PATH="$HOME/.poetry/bin:$PATH"' >> ~/.zsh

$ source ~/.bashrc

#　環境を各ディレクトリ直下に作るためのコマンド
$ poetry config virtualenvs.in-project true
```
## 実際に使う場合
新しい作業ディレクトリを作成し、移動したら

```terminal:ターミナル
$ poetry init
```
対話型で、質問に答える形で環境を作っていきます。
これを行うことで`pyproject.toml`というファイルができます。環境の設計図だと考えてください。
ここで入れ忘れたモジュールがあっても後に追加できます。

```terminal:ターミナル
$ poetry add モジュール名 
$ poetry install
```

## jupyterを使う場合

```terminal:ターミナル
#少し時間がかかります
$ poetry add jupyter
# 起動
$ poetry run jupyter notebook
```
個人的にはnotebookよりもjupyterlabの方が使いやすいのでおすすめ。

```terminal:ターミナル
$ poetry add jupyterlab
$ poetry run jupyter lab
```
起動の際は`jupyter`と`lab`の間に空白が必要です。

## poetryの便利なその他のコマンド

```terminal:ターミナル
# poetry自身のアプデ
$ poetry self update

# poetry内の.pyファイルの実行
$ poetry run python hoge.py

# 環境内に入る(出る時はexit)
$ poetry shell
```
## 最後に
Googlecolabも非常に強力ですが、最初から環境が用意してあるがゆえに、中で何が行われているか理解しにくいです。ローカルに一度でも環境を構築した経験があれば、この先も非常に強い武器となります。ぜひ臆せず挑戦してみてください。質問はいつでも受け付けています。

## 余談
序盤でも触れたAnacondaの話を少しします。インストール時にパスの設定するのですが、Anacondaの/bin下の設定がOSのもともとの環境と干渉しあい思わぬ不具合を生みやすいです。UNIXベースのOSということもあり、自分の実行環境がよくわからなくなるなどの欠点がWindowsと比べ多いという問題点があります。Windowsの場合は干渉するものはありませんし、最初からPythonが入っていないため環境の準備が少々面倒です。なのでMacに比べてAnacondaの利用は実用的だと思ってます。(筆者がMacユーザーのため、偏見は少し入ってます)
あと必要のないツールも有無を言わさず大量に入っているため、容量の圧迫は余儀なしです。

### 参考
[zsh環境でpoetryのインストール(エラー対処)方法](https://qiita.com/tama0571046/items/ee0e533f37db1aa39463)