m1チップMacでminiconda使ってJupyter NotebookでPython使う環境構築

こんにちは。AIエンジニアとかやってる城宮斜塔です。

今回は個人的に勉強しているPythonについて、minicondaでの環境構築について調べた知識が溜まってきたので、一度メモして整理しておこうと思いこの記事を書いています。

さまざまなサイトからの情報を引用し、エッセンスだけをメモしているので、概観を見渡すのにはちょうどいいと思います。

## 1. 私の環境
- m1チップの最新Macbook Air
- macOS Big Sur 11.1
- Homebrew
- miniconda
- jupyter notebook
(コードエディタはVScode)

## 2. Homebrew

MacでのパッケージマネージャはHomebrewを用いています。
導入する意図としては、さまざまなパッケージをいろんな場所でいろんなやり方でインストールしているとわけがわからんなるからです。ちゃんとパッケージは管理しよう（教訓）


m1チップでBig surでもちゃんと動いています。
若干不具合もあったりするみたいですが、
今のところはなんとかやっていけています。

### インストールの仕方

[公式ホームページ](https://brew.sh/index_ja)

のインストールのコードをターミナルに貼り付けて実行します。
ターミナルの使い方がわからない方はレッツ検索。
Macだとアプリケーションのその他の中に紛れているのでわりとみつけやすい。
windowsだとわざわざ検索しないとデスクトップからは辿り着きにくかったりするので・・・。

### 使い方

同じくターミナルで、```brew```を実行してみると、homebrewがちゃんと動作しているかを知ることができる。また、通常使う際によく使うコマンドとしては、

```
brew install PACKAGE_NAME
```

PACKAGE_NAMEをインストールできます。

例)

```
brew install npm
```

<br>
今インストールされているパッケージの確認

```
brew list
```

<br>
処分したいパッケージがあれば、

```
brew uninstall PACKAGE_NAME
```

でアンインストールしよう。
<br>
とまあ、これは基本編というところでしょうか。qiitaをはじめとして沢山の導入記事があるので、ここはこのぐらいにしておきます。

参考:[Homebrew使い方まとめ](https://qiita.com/vintersnow/items/fca0be79cdc28bd2f5e4)

## 3. Miniconda

まず、Minicondaとはなんぞやというところから話をしますと、Anacondaというデータサイエンスに使うようなPythonのパッケージなんかをまとめてインストールしてくれるやつです。

メリット
- 導入が簡単

デメリット
- くそ容量を食う

<br>

このデメリットが割と悲惨で、いらないパッケージとかソフトがまとめて入っちゃってるので、必要最低限なパッケージだけをまとめたものがminicondaとして提供されているのです。

ちなみに、Anacondaの商用利用は有償になったらしいので、ビジネス利用の方はAnacondaから手が離れて行くかもしれませんね。

参考:[Anacondaが有償化されて困っている人に贈る、Pythonのパッケージ管理](https://qiita.com/c60evaporator/items/ba41cef4b37465c39948)
<br>
ちなみにMinicondaの利用に関しては、有償化の規約変更の影響は受けない（らしい）です。

参考:[Anaconda パッケージリポジトリが「大規模な」商用利用では有償になっていた](https://qiita.com/tfukumori/items/f8fc2c53077b234384fc)

### インストールの仕方

ターミナルで

```
brew install Caskroom/cask/miniconda
```

を実行。
<br>
ホームにある```.bash_profile```に以下を追記してパスを通します。

```
export PATH="/usr/local/Caskroom/miniconda/base/bin:$PATH"
```

確認はターミナルで```python```を実行して、```Anaconda, Inc.```が表記されているようなら成功です。

参考:[Minicondaを使う](https://qiita.com/Scstechr/items/10e460c66fb3cbf3bb22)

### 使い方

```
conda activate
```

Conda環境を有効化する。成功したらターミナルの名前の前に(base)とつきます。
例）

```
(base) $
```

<br>
Pythonのパージョンを指定してConda環境を作成する。

```
conda create --name NAME python=VERSION
```

例）

```
conda create --name py37 python=3.7
```

Pythonのパージョンを指定してConda環境を作成する。
pyenv使ってましたが、これあったらいらんやんとなりました。
<br>
環境のアクティベート

```
conda activate py37
```

後ろに環境名を入れると、その環境をアクティベートできます。

<br>
アクティベートした状態でパッケージをインストール

```
conda install PACKAGE_NAME
```

<br>
condaでパッケージを探して見つからない場合は、pipでインストールします。しかし、condaでインストールしたものをpipでもインストールしたりしたら環境がめちゃくちゃになるので、

- まずは```conda install```で試す
- 無理なら```pip install```でインストール
という風にしましょ。

<br>
ちなみに環境から出たいときは、

```
conda deactivate
```

<br>
アクティベートしてある環境に入っているパッケージ名を確認

```
conda list
```

<br>
ここらへんまでがよく使うコマンドかと思います。
他にもさまざまなコマンドがありますので、それは公式ホームページやQiita記事を参考にするといいでしょう。

参考:[Python Japan公式ホームページ](https://www.python.jp/install/anaconda/conda.html)

## 4. Jupyter notebook

さて、ここまで終われば、好きなPythonバージョンで、プロジェクトごとに環境を切り分けて作業することが可能になったかと思います。

次は実際にJupyter notebookに仮想環境を適用し、パッケージを使うところまで行って本記事を終わりとしたいですね。基本的に使う環境がアクティべートされている前提で話します。

### インストールの仕方
```
conda install jupyter
```
まずはjupyterをインストールして、```jupyter notebook```のコマンドが使えるようにします。

### 使い方
今アクティベートされている環境に名前をつけてjupyter notebookのカーネルに登録

```
ipython kernel install --user --name=KERNEL_NAME
```

<br>

現在あるカーネルの一覧を確認

```
jupyter kenelspec list
```

<br>

必要ないカーネルを削除

```
jupyter kernelspec remove KERNEL_NAME
```

あとは```jupyter notebook```コマンドで立ち上げたノートブックの上のタブから登録したカーネルを選択すれば、アクティベートされた状態のターミナルで```conda install```しつつ、プログラムを回していけます。

試しに、ターミナルで```conda install pandas```した後、ノートブックで```import pandas as pd```あたり実行してみるとうまくいっているかわかるでしょう。

モジュールエラーが出なかったら、あとはガンガンプログラム回して行くだけ！

## 5. 最後に

以上、私の使っているm1チップ最新Macbook AirでMinicondaを使用し、Jupyter notebookでPythonプログラムを回す環境構築の仕方を紹介しました。

メモ書きのようにコマンドも並べているので、自分が後で見直す際にも使えるようイメージしました。誰かのお役に立てれば幸いです。

さ、機械学習やりますかぁ！

[Vuepressで作った技術ノート](https://teaminosiro.netlify.app/blogs/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%BB%E8%87%AA%E5%8B%95%E5%8C%96/2021/20210207.html#_1-%E7%A7%81%E3%81%AE%E7%92%B0%E5%A2%83)