M1搭載MacBook Airが来た！手っ取り早くPython計算環境を作ってみる

# はじめに

2020年12月28日、M1 搭載 MacBook Air が来た。
せっかくの M1 だし、趣味用 Mac なので、Rosetta 2 は使わずに使用環境整備を行うことにします。

まずは、M1 (Apple Silicon) に対応している Google Chrome（ブラウザ）と CotEditor（テキストエディタ）をインストール。次は問題の Python のインストール。事前に調べておいた方法として、２つの方法を試してみました。

結果としてMiniforge3というのを使うことにより、これまで iMac で使っていたものと同等のものが、比較的容易に作成できました。iMac の python 環境は pyenv で作っていますが、複数バージョンを行き来する使い方は行っていません。pip と pyenv が M1 上で動き出したら、そちらでやり直すつもりです。

#### （参考）BasicTeXのインストールを試みたが断念 (2021.01.01)
TeX は Apple silicon に対応しているようであるので、試しに BasicTeX のインストールを試みました。

+ BasicTeX-2020-Universal.pkg
+ brew cask install basictex

上記２つとも、途中で Rosetta 2 のインストールを求められた為、インストールを断念。「インストールできない」という意味ではなく、Rosetta 2 を入れなければインストールできないということで、今回の思想に反するため「取りやめた」という意味。

TeX はなくても、HTML + MathJax で数式入り文書を残すことができるので、４月？に出るであろう2021年版に期待しようと思います。


# Python インストール（Homebrew）

１つ目は Homebrew から Python をインストールするもの。以下に従ってやってみました。

[https://dev.classmethod.jp/articles/make-3-9-as-python-default-on-m1-mac/](https://dev.classmethod.jp/articles/make-3-9-as-python-default-on-m1-mac/)

Homebew と Python 3.9 まではすんなりインストールできました。
しかし、numpy, matplotlib が pip で入らない、

Homebrew から numpy を入れてみましたが、numpy は OK、しかし pip による matplotlib のインストールなど後が続きません。
なお、numpy と同時に GCC (gfortran) と openblas もついでにインストールされる模様。numpy と openblas は uninstall したが、gfortran はいただいておきました。gfortran のバージョン確認結果は以下の通り。

```
(base) % gfortran -v
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/opt/homebrew/Cellar/gcc/10.2.0/libexec/gcc/aarch64-apple-darwin20/10.2.1/lto-wrapper
Target: aarch64-apple-darwin20
Configured with: ../configure --build=aarch64-apple-darwin20 --prefix=/opt/homebrew/Cellar/gcc/10.2.0 --libdir=/opt/homebrew/Cellar/gcc/10.2.0/lib/gcc/10 --disable-nls --enable-checking=release --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-10 --with-gmp=/opt/homebrew/opt/gmp --with-mpfr=/opt/homebrew/opt/mpfr --with-mpc=/opt/homebrew/opt/libmpc --with-isl=/opt/homebrew/opt/isl --with-system-zlib --with-pkgversion='Homebrew GCC 10.2.0' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --disable-multilib --with-native-system-header-dir=/usr/include --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk SED=/usr/bin/sed
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.2.1 20201220 (Homebrew GCC 10.2.0) 
(base) % 
```

#### （結論）Python本体とnumpyだけでは寂しい。Python計算環境構築としては失敗。



# Python インストール（Miniforge3）
２つ目は、以下のサイトを参考に、というか書いてある通りに実行。

+ [https://qiita.com/syoyo/items/6ad890c8a902d02d8c5a](https://qiita.com/syoyo/items/6ad890c8a902d02d8c5a)
+ [https://braveam.com/archives/1409](https://braveam.com/archives/1409)


[https://github.com/conda-forge/miniforge](https://github.com/conda-forge/miniforge) からarm64 (Apple Silicon)用のスクリプトを取ってきて実行。

```
bash Miniforge3-MacOSX-arm64.sh
```

あとは```myenv```という環境を作って、欲しいものをどんどんインストールしていきます。この```myenv```というのは好きな名前に。私は先人の例に従い同じ名前にしてしまった。

```
conda create -n myenv python=3.9
conda activate myenv

conda install numpy
conda install matplotlib
conda install sciPy
conda install pandas
conda install scikit-learn
conda install openpyxl
conda install jupyterlab
```

```myenv``` をアクティブにして入れたものが ```import``` できるか確認してみると。。。OK。もちろん ```Jupyter notebook``` も動きます。

```
(base) % conda activate myenv
(myenv) % python
Python 3.9.1 | packaged by conda-forge | (default, Dec 21 2020, 22:08:11) 
[Clang 11.0.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> import matplotlib
>>> import scipy
>>> import pandas
>>> import sklearn
>>> import openpyxl
>>> quit()
(myenv) % 
```

```openpyxl``` を入れていますが、MS-officeが入っていなくても問題なし。昔作ったexcelファイルも読み込めますし、excel形式で出力したものは、Mac標準付属のNumbersで中身の確認ができます。入力データ用の新しいexcelファイルもGoogle spreadsheetで作成することができます。


#### とは言いながら Microsoft 365 を購入
1月14日、Microsoft 365 を購入しました。この時点で、Apple silicon に対応しており、問題なくインストール。問題なく使えています。

##### OneDrive.app は Intel で動く
ここで、Word, Excel, PowerPoint は Apple silicon 対応していますが、OneDrive.app は Intel で動きます。せっかく Microsoft 365 を購入したので、OneDrive を使おうとしたら、そのときに Rosetta 2 が入ってしまったよう。
そこで、Rosetta 2 は入れないという方針を変換。入ってしまったものはしょうがないし、1TB の OneDrive が使えないのは癪なので、前々から入れようと思っていた、Apple silicon 未対応の Google日本語入力, Google Earth Pro, Norton Security も入れてしまいました。これらも問題なく動いています。

#### jupyterlabでインストールしたが使っているのは jupyter notebook
Jupyter notebook が動いていることを示す写真を示します。デモなので Sidecar で iPad Air に Jupyter notebook の画面を表示してみました。

![IMG_0257.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129300/480c504c-9b2e-6274-ab24-fba0a126572f.jpeg)


#### （結論）現時点（2020.12.29）で手っ取り早くPython計算環境を作るには「Miniforge3」を使うのが簡単。少なくとも numpy, Matplotlib, scipy, pandas, scikit-learn, openpyxl, Jupyter notebook が使えます。ただし、使うためには conda 環境の activate が必要。



## おまけ：M1 MacBook Airは本当に速いのか？ 
### Python matplotlibの色塗り処理 (2021.02.21)
[以前投稿したこちらの記事](https://qiita.com/damyarou/items/23607fb0a252b53ebebb)で行った図化処理をM1 MacBook Air（最低スペック：メモリ 8GB）の Python でやってみた。GMT (Generic Mapping Tools)がApple siliconに対応しておらず、現状使えないため、M1 MacBook Airでどのくらいのスピードがでるか試してみた次第である。結果は驚くばかり。

ついでに、iPad Air 4 (A14 Bionic) の Pythonista 3 でもやってみたら、やっぱ速い！

#### Intel MBP
+ MacBook Pro (Retina, 13-inch, Mid 2014)
+ macOS High Sierra
+ Python 3.6.4
+ GMT 5.4.3
+ ImageMagick 7.0.7

#### M1 MBA
+ MacBook Air (M1, 2020)
+ macOS Big Sur
+ Python 3.9.1

<table border="1">
<tr>
<th>項目</th>
<th>Intel MBP<br>Python作図</th>
<th>Intel MBP<br>GMT作図</th>
<th>M1 MBA<br>Python作図</th>
<th>iPad Air 4<br>Pythonista3作図</th>
</tr>
<tr><td>Python作図（png） </td><td>242 sec</td><td>  ---  </td><td>  14 sec </td><td>  17 sec </td></tr>
<tr><td>Pythonデータ処理  </td><td>  ---  </td><td>  2 sec</td><td>  ---  </td><td>  ---  </td></tr>
<tr><td>GMT EPS出力      </td><td>  ---  </td><td>  7 sec</td><td>  ---  </td><td>  ---  </td></tr>
<tr><td>Imagemagick処理  </td><td> 29 sec</td><td> 47 sec</td><td>  ---  </td><td>  ---  </td></tr>
<tr><td>Python画像連結処理</td><td> --- </td><td> --- </td><td>  2 sec  </td><td>  2 sec  </td></tr>
<tr><td>合計             </td><td>271 sec</td><td> 56 sec</td><td>  16 sec </td><td>  19 sec </td></tr>
</table>

### Python 数値計算 (2021.02.25)
[最初に投稿したこちらの数値積分](https://qiita.com/damyarou/items/7cbb44ffde9546a94682)についても速度比較を行ってみた。結果は以下の通り。

iPad の Pythonista3 は、基本的に numpy, matplotlib, sympy しか使えないが、scipy や pandas, sklearn などが使えるようになれば、多様な計算に活用できるのだが、その見込はなさそうで残念。

<table border="1">
<tr>
<th>項目</th>
<th>Intel MBP<br>Python 3.4.3</th>
<th>iPad mini 4<br>Pythonista3</th>
<th>M1 MBA<br>Python 3.9.1</th>
<th>iPad Air 4<br>Pythonista3</th>
</tr>
<tr><td>Newmark $\beta$</td><td> 2.072 sec</td><td> 9.7 sec</td><td> 1.264 sec</td><td> 1.450 sec</td></tr>
<tr><td>Runge-Kutta    </td><td> 2.533 sec</td><td>11.5 sec</td><td> 1.634 sec</td><td> 1.732 sec</td></tr>
<tr><td>FFT            </td><td> 1.613 sec</td><td> 7.7 sec</td><td> 1.010 sec</td><td> 1.173 sec</td></tr>
<tr><td>scipy.odeint   </td><td>30.134 sec</td><td> ---    </td><td>16.793 sec</td><td>  ---     </td></tr>
</table>



#### （結論） M1 MacBook Air は速い!<br>加えて iPad Air 4 (A14 Bionic) も速い！

以　上