M1の開発環境 Python編

##動機
今回、M1でPythonの実行環境を整えるのになかなか苦労したので、それまでの過程を共有できればなと思い書くことに至りました。
参考になれば幸いです。
##1, M1とは?
・Apple独自のプロセッサ
詳細: https://www.apple.com/jp/newsroom/2020/11/apple-unleashes-m1/
・なぜIntel製CPUでは動くのにM1では動かないのか
→言語(アーキテクチャ)が異なる
　　Intel: x86
　　M1: ARM
・現在どのようにして動かしているのか
　　→今までのインテルCPU向けアプリをM1向けアプリに変換
　　→インテルCPU向けアプリが話す言語を、M1が理解できる言語にリアルタイムで翻訳
詳細: https://www.gizmodo.jp/2020/11/what-did-apple-do-m1-mac-future.html

##2, Pythonとは？
・インタプリタ形式の、対話的な、オブジェクト指向プログラミング言語
・Pythonは一種の”ソフトウェア”という認識
・Pythonというプログラミング言語（言語仕様）があり、CPythonというのはそのプログラミング言語でもっともよく使われている実装

　CPython: C言語を使って書かれたPython処理系
　Jython: Javaを使って書かれたPython処理系
　IronPython: C#を使って書かれたPython処理系
　RPython: 制限付きCPythonを使って描かれたPython処理系(“R”: Ristricted)
　PyPy: RPythonを使って書かれたPython処理系(JITの導入) 　　　等々
詳細: https://www.sejuku.net/blog/89458

##3, Pythonのバージョン
・大きく分けて2系と3系
・3系と2系は互換性を持たない
2系: 2020年に廃止(サポート対象外)
　　　2.7.18が最後のリリース
3系: 2008年に公開
　　　サポート対象: 3.6, 3.7, 3.8, 3.9 系
　　　3.x … マイナーバージョン
　　　3.x.y … マイクロバージョン

####○M1で特定のマイナーバージョンで動くライブラリ(私が経験したもの)
・3.7系
scikit-learn 0.21
・3.8系(3.8.10では動かない)
scikit-learn 0.22~0.24, mecab, CRF++, Cabocha, gensim, nltk, owlready2(Cythonインストール下)
※mecab, CRF++, Cabochaをダウンロードサイトから圧縮ファイルをダウンロードして解凍して利用する場合は、必ずpythonの環境を整えた状態で行ってください
・3.9系
tkinter 8.6
※なぜか3.8系でtkinterが動かせませんでした...なので、今はtkinterを使う時だけ3.9系に切り替えています

####共有したいこと
・Pythonは頻繁にバージョンアップしていく
・新しいバージョンでも使えないパッケージがある(使えるパッケージも増える)
・3.8.9は機械学習のライブラリがある程度扱える
・3.8.10はM1に対応しているはずなのだが...
・何か新しい情報が入ったら共有お願いします

##4, Pythonの環境構築
・Pythonの開発環境を整える方法:
　　ローカル環境とクラウド開発環境の二つ
・ローカル環境の利点
　　→PC内に仮装のサーバーを設置して開発ができる
・クラウド開発環境の利点
　　→わざわざ開発環境を構築する必要がない
　　→複数の端末からアクセスすることができる
詳細: https://kredo.jp/media/python-development/

###4.1, Pythonの環境構築(クラウド編)
####○クラウド開発環境:
　　AWS Cloud9:
　　　　チーム開発用
　　Jupyter notebook:
　　　　ノートブックにコードを書いて実行できる
　　Google Colaboratory:
　　　　GPUを無料で利用でき、機械学習の計算にかかる時間を短くできる
詳細: https://shikaku-benkyou.com/python-ide-osusume/

###4.2, Pythonの環境構築(ローカル編)
####○ローカル開発環境:
・統合開発環境(IDE):
　　Xcode(Mac), VSCode, Pycharm, Atom(Git), Pyscripter(Win), Sublime Text, Spyder
・起動の速さ: Xcode, VSCode > その他 >> Pycharm
・満足度: Pycharm, VSCode > その他
※Pycharmは有料版と無料版がある
　　有料版: Web開発, DBサポート
詳細: https://shikaku-benkyou.com/python-ide-osusume/

####○Pythonの実行環境を整える:
Anaconda, Docker, pyenv, homebrew, 公式サイトから　の5つの方法がある
#####Anaconda
・Google Colaboratoryのローカル版。機械学習のパッケージや、Pycharm, Spyder, VSCode, jupyter notebookを同時にインストールできるが4GB弱ストレージを食うらしい。
・また、pyenvやbrewとの相性が...
・機械学習系のライブラリをうまく入れられなかった人にはオススメかもしれない
詳細1: https://www.python.jp/install/anaconda/macos/install.html
詳細2: https://code-graffiti.com/homebrew-and-anaconda-interference-on-mac/
詳細3: https://www.creativevillage.ne.jp/72837
#####Docker
・環境構築が楽。任意のLinux系OS環境で実行できる。
・GUIを表示するプログラムを動かすことが難しい
詳細: https://qiita.com/reflet/items/4b3f91661a54ec70a7dc
#####HomeBrew(brew)
・Mac上で様々なソフトウェアを簡単に導入することができる便利なシステム
・brewでpythonをインストールする方法とbrewでpyenvをインストールしてからpyenvでpythonをインストールする方法の二つがあるので混乱しないように
詳細: https://qiita.com/ms-rock/items/72b8f1abc661c539bb09
#####pyenv
・HomeBrewからインストール。簡単にPythonのバージョン変更が可能。
・M1でもバージョン変更は確認できたが、動作はしなかった。(2021/5)
詳細: https://qiita.com/crankcube/items/15f06b32ec56736fc43a
#####公式サイトからダウンロード
・既存の環境を破壊せずPythonのみインストール可能(個人的にオススメ)。ただし、パッケージをpip等で個々にインストールする手間がある。

####○環境変数の設定(brewやpyenv, Anacondaでインストールした場合)
・環境変数(パスを通す)の設定がそれぞれのツールに依存するので頑張って調べてください
→自分は混乱したので、Pythonを単体でインストールしてパスを通しました
　　→超簡単↓

####○環境変数の設定(公式サイトからダウンロード)
まず公式サイトからダウンロード: https://www.python.org/
ダウンロードの方法は他サイトを参照してください
ダウンロードができたらパスを確認する

```
 %which python3
 /usr/local/bin/python3
```

→恐らくこのような出力が出る
~/.zshrcを確認すると”export LD_LIBRARY_PATH=/usr/local/lib”というのがある。
このパスの先を見に行く

```
%ls /usr/local/bin/
```

とすると、色々なパッケージが表示され、その中にPythonのパッケージがあることが分かる
つまり、
・Pythonのパッケージはインストールする度に/usr/local/bin/の中に入っていく
・~/.zshrcでは複数のパスを指定している
→Pythonのパッケージを色々変更するために複数インストールするとパスが正確に通
らなくなり、うまく行かなくなる。
#####対処法
・環境変数の優先度が高い~/.zprofileに使いたいバージョンのPythonのパスを通す
・~/.zprofile : 常時環境変数が指定されている状態
・~/.zshrc : ターミナルを起動する度にパスを通す

```
%which python3
/usr/local/bin/python3
%nano ~/.zprofile
```

export PATH=/Library/Frameworks/Python.framework/Versions/3.X/bin:$PATH
を~/.zprofileに記入

```
%source ~/.zprofile
% which python3
/Library/Frameworks/Python.framework/Versions/3.X/bin/python3
```

これでOK
※環境変数を変更したら必ずターミナルを再起動(変更が反映されないため)