- M1 MacにPythonインストールして開発環境構築してみた https://youtu.be/dqw4aAgEwoQ
- なるべく、プログラミング初学者向けにもわかりやすく解説していきます
- いっしょに やっていきましょう
- 2021年1月時点の情報です
- M2のMacが出る頃(いつ?)には 古い情報になってるはずなのでお気をつけください
- ソフトウェアエンジニア。株式会社プレジニア代表取締役。
- iPhoneアプリ開発歴10年。企画開発したiPhoneアプリ160万ダウンロード以上。
- 新規事業立上げ支援など。
- 理論編: M1 Macの罠とは
- 実践編
- ①Webアプリ(django)
- ②データ分析(jupyter, pandas, numpy, matplotlib)
- ③ディープラーニング(tensorflow)
- 「M1 Mac」の環境は 「Intel Mac」のPython開発環境と大きく違うことに注意しよう!
- Pythonにはバージョンがあることに注意しよう!
- Pythonの仮想環境がたくさんあることに注意しよう!
- Rosseta上なのかARMアーキテクチャ上なのか意識しよう!
- これは、「M1 Macでプログラミングする上で注意すべき」ポイント①
- 例えば、progateの記事「Pythonの開発環境を用意しよう!(Mac)」だと、
- https://prog-8.com/docs/python-env
- HomeBrewとpyenv使おう、と買いてあるが、、、「M1 Mac」では動かない!
- これは「Intel Mac」の情報!
- 「Intel Mac」の古い情報に注意しよう!
- Intel Macとは:
- Intelのチップ(CPU)が搭載されたMac
- 古い
- M1 Macとは:
- Apple社が設計したM1チップが搭載されたMac
- ARM社がApple社へチップの回路図を提供してる
- ので、M1チップのアーキテクチャ(設計方法)を「ARMアーキテクチャ」と呼ぶ
- M1チップを「Apple Silicon」とも呼ぶ
- 2020年11月に発売!(新しい)
- Apple社が設計したM1チップが搭載されたMac
- Intel Macとは:
- M1 Macでは
- Homebrewは使わないで!(動くけど難易度高い)
- pyenvは使わないで!(動かない=2021年2月時点)
-
これは、pythonの開発環境でハマりがちなポイント①
-
python2系とpython3系は 全然違う!
- 「文法」が大きく違う
- 文法とは 書き方の話
- python2系では
print "Hello world!"
- python3系では
print("Hello world!")
- 「文法」が大きく違う
-
これからはpython3系を使おう!
- python2系は 開発が終了している
- python2系の廃止日(End Of Life)は2020年1月1日だった
-
「Intel Mac」と「M1 Mac」の違い
- Intel Macでは
- pyenv 使って、いろんなバージョンいれてた
2.7
,3.4
,3.7
etc..
- pyenv 使って、いろんなバージョンいれてた
- M1 Macでは
- pyenvは使わない
- Intel Macでは
-
これは、pythonの開発環境でハマりがちなポイント②
-
仮想環境がいろいろあって よくわからない!
- venv
- virtualenv
- anaconda
- miniconda
- miniforge
- ...
-
仮想環境とは:
- Python を使って開発や実験を行うときは、用途に応じて専用の実行環境を作成し、切り替えて使用するのが一般的。
- こういった、一時的に作成する実行環境を「仮想環境」と呼ぶ
- 例)
- プロジェクトAでは, Python3.7 で Django1.10 使う
- プロジェクトBでは, Python3.8 で Django1.11 使う
- 最近は Docker 使って、コンテナイメージ化するのが流行り
- でも 自分はあんまりDockerつかったことないので、すいません解説できずm(_ _)m
- Dockerも、M1 MacではIntel Macと違う!(らしい) ご注意ください
-
「Intel Mac」と「M1 Mac」の違い
- Intel Macでは
- anacondaでもvirtulenvでもなんでも!
- オサミーは pyenv + virtualenv派だった
- M1 Macでは
- anaconda�やminiconda, virtualenvは使わない!
- miniforgeを使おう!(詳細は後述)
- Intel Macでは
-
これは、「M1 Macでプログラミングする上で注意すべき」ポイント②
-
いま動かそうとしてるプログラムは、「Rosseta上なのか」「ARMアーキテクチャ上なのか」意識すべし!
- Rosetta上では動くが、ARMネイティブで動かないプログラムがある
-
Rosettaって何?
- M1 Macの特徴:Rosetta を使ってIntel Mac用のソフトウェアを使うことができる(例外あり)
- Rosetta とは
- 従来のインテル用のMacアプリを Apple Silicon Mac上で自動的に変換して実行できるようにする仕組み
- 「Rosettaを使用してひらく」チェックボックスつけてアプリ起動すると、Rosetta上で動く
- 例) ターミナル, Xcode, iTerm2 など
- Rosetta使えば動くのか ARMネイティブ対応(M1最適化されてる)なのか ソフトウェア一覧まとめサイト
- Is Apple silicon ready?
- https://isapplesiliconready.com/
-
いま「Rosseta上なのか」「ARMアーキテクチャ上なのか」確認できるコマンドは後述
- 前提
- ①Webアプリ(Django)
- ②データ分析(jupyter, pandas, numpy, matplotlib)
- ③ディープラーニング(tensorflow)
- macOS BigSur 11.1
- MacBook Air(M1, 2020)
- Python 初期状態
-
ターミナル.appで叩いたコマンドと結果
- ターミナルの場所:Finderでアプリケーション>ユーティリティ>ターミナル.app
-
python -V
->Python 2.7.16
-
which python
->/usr/bin/python
-
python3 -V
->Python 3.8.2
-
which python3
->/usr/bin/python3
missing xcrun at :/Library/Developer/CommandLineTools/usr/bin/xcrun
- というエラーになったら、それはXcode Command Line Toolsがインストールされてないようなので
- コマンド
xcode-select --install
を叩いて まずCommand Line Toolsをインストールしてみてください
-
conda
->zsh: command not found: conda
-
文法だけ色々試したい場合は、「ブラウザで動く環境」がおすすめ!
- Pythonの開発環境を構築するだけでも 大変なので
- ブラウザで動く環境(例):
- https://skulpt.org/
- https://trinket.io/python
- 「文法学びたいだけの人」はこっちがおすすめ
-
インタラクティブモードもあるよ
- ターミナルで、
python3
打つと 実行するとはじまる - Control + D で終了
- pythonってM1 Macの初期状態で、すでにMacにインストール済み.
- 文法だけ学びたい人 や ちょっとしたスクリプト書きたい人にとっては...
- これから説明するcondaとか必要なし
- ターミナルで、
-
確認コマンド:ターミナルで
uname -m
打つarm64
と出力 : ARMアーキテクチャ で実行中x86_64
と出力 : Rosetta利用 または ネイティブIntelアーキテクチャ で実行中
-
オサミーの場合:
- ARMアーキテクチャで実行したい場合「ターミナル.app」で実行
- Rosettaで実行したい場合「iTerm2.app」で実行
- VSCode上では適宜
$ arch -x86_64 zsh
や$ arch -arm64 zsh
で切り替えする
- 1-1. Visual Studio Codeをインストールしよう
- 1-2. miniforgeでcondaをインストールしよう
- 1-3. condaでWebアプリ開発用の環境をつくろう
- 1-4. Djangoでローカルサーバーを起動しよう
- https://code.visualstudio.com/
- オサミーバージョンは 1.52.1
- M1 Macでは:anaconda🙅♂️ や miniconda🙅♂️ や homebrew🙅♂️ や pyenv🙅♂️ は使わないで!🙅♂️🙅♂️🙅♂️🙅♂️🙅♂️🙅♂️
- ARMアーキテクチャに最適化してるのは miniforgeだけ(オサミーの知りうる情報 & 2021年1月末時点)
- miniforge(conda)は、もともとデータ分析用に用意されてる環境だけど、Webアプリ開発にも使えるお!
- miniforgeとは?
- minicondaと同等に軽い Python 実行環境プラットフォーム。
- minicondaとは?違いは?
- miniforgeは コミュニティ。conda環境で必要最小限のパッケージ。
- minicondaは anacondaの小さいバージョン。conda環境で必要最小限のパッケージ。
- てか anacondaとは?
- anacondaは、「データサイエンス向けのPythonパッケージなどを提供するプラットフォーム」
- 科学技術計算などを中心とした、多くのモジュールやツールのコンパイル済みバイナリファイルを提供
- 簡単にPythonを利用する環境を構築できる
- anacondaとminiconda比較
- anacondaは、パッケージ全部入り。とにかくデカイ。容量が大きい。
- minicondaは、必要最小限のパッケージだけ。軽くてすぐはじめられる。
- ただし両者とも M1 Mac(ARMアーキテクチャ)に非対応(2021年1月時点)
- classmethodさんの記事参照
- anacondaは、「データサイエンス向けのPythonパッケージなどを提供するプラットフォーム」
- miniforgeは、minicondaの「M1 Mac対応版」と考えてよい
- まとめると、
- 「M1 Mac(ARMアーキテクチャ)に対応している、
- 必要最小限のパッケージが揃った、
- データ分析用Python 実行環境プラットフォーム」
- https://github.com/conda-forge/miniforge
- githubリポジトリ から「Miniforge3-MacOSX-arm64」をダウンロード
- ターミナルでコマンド
bash Miniforge3-MacOSX-arm64.sh
叩く
- いろいろ聞かれるがすべて「yes」でOK
-
~/.zshrc
とは ターミナルひらくときに最初に読み込まれるファイル -
余談:シェルが zsh ではなく bashだったら
.bashrc
に該当する- シェルとは:ターミナルでコマンド実行するソフトウェア(みたいなもの)
- macOS BigSurからデフォルトで シェルが zsh になった(いままではbash)
-
コマンド
source ~/.zshrc
で .zshrc を読み込める- するとcondaのbase環境が有効化される
- コマンドラインの頭に(base)がつく
- ターミナル立ち上げるたびに、condaのbase環境が起動するのが鬱陶しかったら下記コマンド叩く
conda config --set auto_activate_base false
- するとcondaのbase環境が有効化される
- まずは
conda deactivate
で 現在起動されてるconda環境を停止する
-
conda activate
で デフォルト環境(base)の起動 -
conda create -n my_env python=3.9
で環境作る-n
オプションは、環境名- 今回は「webapp_env」と「ml_env」の、2つの環境をつくる(あとで)
python=3.9
はpythonのバージョン指定
-
conda info -e
で作成済みのconda環境を確認する -
conda activate my_env
で「my_env」というconda環境を起動する- 余談:"my_env"は「俺の環境(my environment)」という意味。サンプルコードでよくでてくるね。
conda list
で、その環境でインストール済みパッケージ表示conda install ${package_name}
でその環境にパッケージをインストール- 例)conda install jupyter
conda install python=x.x
で 他のバージョンのpythonをインストールできる
conda deactivate
で いま起動してるconda環境を停止- 詳しくは公式ドキュメント参照
conda create -n webapp_env python=3.9
- webapp_env という名前の conda環境をつくる. pythonのバージョンは3.9で
conda activate webapp_env
- webapp_env という名前の conda環境を起動
conda install django
- その環境に Django パッケージをインストール
- オプション
-c
つけてチャンネルを明示的にしてもよいconda install -c conda-forge django
- https://anaconda.org/conda-forge/django
conda list
- その環境でインストール済みパッケージ表示.
django-admin startproject helloworld
- 「helloworld」という名前のdjangoプロジェクトをつくる(フォルダが作成される)
cd helloworld
- ディレクトリ移動
python manage.py migrate
- マイグレート(おまじないみたいなもん. ここでは解説省きます🙇♂️)
python manage.py runserver
- サーバー起動
- http://127.0.0.1:8000/ へアクセス
- ローカルサーバー起動してることを確認
- ①で使ったminiforgeのcondaを前提にすすめるので、見てない方は①の「1-2. miniforgeでcondaをインストールしよう」から先に見てね
- 2-1. condaでデータ分析用の環境をつくろう
- 2-2. Jupyter Notebookを立ち上げて試そう
conda create -n ds_env python=3.9
- ds_env という名前の conda環境をつくる. pythonのバージョンは3.9で
- 余談:dsは "data science" の略。
conda info -e
で 作成済みの環境を確認
conda activate ds_env
- ds_env という名前の conda環境を起動
conda list
で その環境にすべてインストールされているパッケージ確認
-
conda install jupyter
- ブラウザベースの対話形式実行環境「jupyter」のインストール
- 余談:最近は「Jupyter Notebook」よりも「JupyterLab」が流行りつつある
- JupyterLabは次世代のUI環境でNotebookより多機能. 色々できる.
- 好みでJupyterLabインストールしてもよい ->
conda install jupyterlab
-
conda install numpy
- 行列計算ライブラリ「numpy」のインストール
-
conda install pandas
- データ構造演算ライブラリ「pandas」のインストール
-
conda install matplotlib
- グラフ描画ライブラリ「matplotlib」のインストール
-
conda list
- その環境でインストール済みパッケージ表示.
-
その他パッケージは 下記サイトから検索してインストール
- https://anaconda.org/search
- OpenCV, JupyterLab, scikit-learn etc..
-
jupyter notebook
- Jupyter Notebook立ち上げる -> 勝手にブラウザで開かれる
- Jupyter Labの場合は コマンド
jupyter lab
-
右上のNewボタン>Python3を選び、Python3のノートブックをつくる
-
まずはそれぞれimport
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
- バージョン確認など
# jupyter上に画像表示したいとき
# %matplotlib inline
np.__version__
pd.__version__
plt.plot([1,3,4,6,6])
- 🙅♂️conda使わない (もちろんHomeBrewも pyenvも使わない 🙅♂️)
- M1 Mac(ARMアーキテクチャ)に最適化されたTensorFlow使っていく
- 3-1. tensorflow_macosでtensorflowをインストールしよう
- 3-2. venvの仮想環境"tensorflow_macos_venv"を起動しよう
- 3-3. kerasでmnist使って画像認識させてみよう
- githubのリポジトリ をcloneしてくる
git clone https://github.com/apple/tensorflow_macos.git
- インストールスクリプトを叩く
cd tensorflow_macos
bash scripts/download_and_install.sh
- 色々聞かれるけどすべて[y] でOK
- ホームディレクトリ
~/
に、tensorflow_macos_venv
がダウンロードされている
. ~/tensorflow_macos_venv/bin/activate
- venvの仮想環境"tensorflow_macos_venv" を起動
- どのディレクトリで実行してもOK
- 起動したら コマンドラインの頭に(tensorflow_macos_venv) がつく
- pythonのインタラクティブモードで
import tensorflow
が成功するか確認 deactivate
でその環境を停止
- venvの仮想環境"tensorflow_macos_venv" を起動
pip freeze
- 現在の環境にインストール済みのパッケージを確認してみる
- 余談:pip とは「PyPI:The Python Package Index」. パッケージ管理ツール.
- 読み方は「ぱいぴーあい」
- https://pypi.org/
- Pythonのパッケージ(ライブラリ)管理は、conda使うかpip使うかどっちか!みたいな感じだよね
- https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands
- Keras のサンプルコードサイトにアクセス
- CNNというニューラルネットワークを組んで, mnist(手書き数字のデータセット. 28x28が7万枚.)の書かれた数字を認識するタスク
- ファイルを適当につくる(今回は
simple_mnist_convnet.py
) - コピーアンドペースト
python simple_mnist_convnet.py
- minist の「画像認識タスク(学習と検証)」実行