😽

M1 MacにPythonインストールして開発環境構築してみた

2021/03/10に公開2

M1 Mac上でPythonの開発環境構築やっていきます

これはYouTube動画の資料です


はじめに

  • なるべく、プログラミング初学者向けにもわかりやすく解説していきます
  • いっしょに やっていきましょう
  • 2021年1月時点の情報です
    • M2のMacが出る頃(いつ?)には 古い情報になってるはずなのでお気をつけください

自己紹介:オサミー

  • ソフトウェアエンジニア。株式会社プレジニア代表取締役。
  • iPhoneアプリ開発歴10年。企画開発したiPhoneアプリ160万ダウンロード以上。
  • 新規事業立上げ支援など。

動画(Python環境構築)の目次

  • 理論編: M1 Macの罠とは
  • 実践編
    • ①Webアプリ(django)
    • ②データ分析(jupyter, pandas, numpy, matplotlib)
    • ③ディープラーニング(tensorflow)

理論編:M1 Macの罠とは

理論編 目次

  1. 「M1 Mac」の環境は 「Intel Mac」のPython開発環境と大きく違うことに注意しよう!
  2. Pythonにはバージョンがあることに注意しよう!
  3. Pythonの仮想環境がたくさんあることに注意しよう!
  4. Rosseta上なのかARMアーキテクチャ上なのか意識しよう!

1.「M1 Mac」の環境は 「Intel Mac」のPython開発環境と大きく違うことに注意しよう!

  • これは、「M1 Macでプログラミングする上で注意すべき」ポイント①
  • 例えば、progateの記事「Pythonの開発環境を用意しよう!(Mac)」だと、
  • 「Intel Mac」の古い情報に注意しよう!
    • Intel Macとは:
      • Intelのチップ(CPU)が搭載されたMac
      • 古い
    • M1 Macとは:
      • Apple社が設計したM1チップが搭載されたMac
        • ARM社がApple社へチップの回路図を提供してる
        • ので、M1チップのアーキテクチャ(設計方法)を「ARMアーキテクチャ」と呼ぶ
      • M1チップを「Apple Silicon」とも呼ぶ
      • 2020年11月に発売!(新しい)
  • M1 Macでは
    • Homebrewは使わないで!(動くけど難易度高い)
    • pyenvは使わないで!(動かない=2021年2月時点)

2. pythonにはバージョンがあることに注意しよう!

  • これは、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..
    • M1 Macでは
      • pyenvは使わない

3. pythonの仮想環境がたくさんあることに注意しよう!

  • これは、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を使おう!(詳細は後述)

4. Rosseta上なのかARMアーキテクチャ上なのか意識しよう!

  • これは、「M1 Macでプログラミングする上で注意すべき」ポイント②

  • いま動かそうとしてるプログラムは、「Rosseta上なのか」「ARMアーキテクチャ上なのか」意識すべし!

    • Rosetta上では動くが、ARMネイティブで動かないプログラムがある
  • Rosettaって何?

    • M1 Macの特徴:Rosetta を使ってIntel Mac用のソフトウェアを使うことができる(例外あり)
    • Rosetta とは
      • 従来のインテル用のMacアプリを Apple Silicon Mac上で自動的に変換して実行できるようにする仕組み
      • 「Rosettaを使用してひらく」チェックボックスつけてアプリ起動すると、Rosetta上で動く
        • 例) ターミナル, Xcode, iTerm2 など
    • Rosetta使えば動くのか ARMネイティブ対応(M1最適化されてる)なのか ソフトウェア一覧まとめサイト
  • いま「Rosseta上なのか」「ARMアーキテクチャ上なのか」確認できるコマンドは後述


実践編

実践編 目次

  • 前提
  • ①Webアプリ(Django)
  • ②データ分析(jupyter, pandas, numpy, matplotlib)
  • ③ディープラーニング(tensorflow)

前提

インストール環境

  • macOS BigSur 11.1
  • MacBook Air(M1, 2020)
  • Python 初期状態

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の文法だけ試したい人はコチラががおすすめ!

  • 文法だけ色々試したい場合は、「ブラウザで動く環境」がおすすめ!

  • インタラクティブモードもあるよ

    • ターミナルで、 python3 打つと 実行するとはじまる
    • Control + D で終了
    • pythonってM1 Macの初期状態で、すでにMacにインストール済み.
      • 文法だけ学びたい人 や ちょっとしたスクリプト書きたい人にとっては...
      • これから説明するcondaとか必要なし

いま 「Rosetta上なのか」「ARMアーキテクチャ上なのか」意識することが重要!

  • 確認コマンド:ターミナルで uname -m 打つ

    • arm64と出力 : ARMアーキテクチャ で実行中
    • x86_64と出力 : Rosetta利用 または ネイティブIntelアーキテクチャ で実行中
  • オサミーの場合:

    • ARMアーキテクチャで実行したい場合「ターミナル.app」で実行
    • Rosettaで実行したい場合「iTerm2.app」で実行
    • VSCode上では適宜 $ arch -x86_64 zsh$ arch -arm64 zsh で切り替えする

---------ここまで実践編の前提---------

①Djangoを使ったWebアプリ開発

目次: Webアプリ開発

  • 1-1. Visual Studio Codeをインストールしよう
  • 1-2. miniforgeでcondaをインストールしよう
  • 1-3. condaでWebアプリ開発用の環境をつくろう
  • 1-4. Djangoでローカルサーバーを起動しよう

1-1. Visual Studio Codeをインストールしよう

1-2. miniforgeでcondaをインストールしよう

  • M1 Macでは:anaconda🙅‍♂️ や miniconda🙅‍♂️ や homebrew🙅‍♂️ や pyenv🙅‍♂️ は使わないで!🙅‍♂️🙅‍♂️🙅‍♂️🙅‍♂️🙅‍♂️🙅‍♂️
  • ARMアーキテクチャに最適化してるのは miniforgeだけ(オサミーの知りうる情報 & 2021年1月末時点)
  • miniforge(conda)は、もともとデータ分析用に用意されてる環境だけど、Webアプリ開発にも使えるお!

1-2-1.用語説明:condaとは?miniforgeとは?

  • miniforgeとは?
    • minicondaと同等に軽い Python 実行環境プラットフォーム。
    • minicondaとは?違いは?
      • miniforgeは コミュニティ。conda環境で必要最小限のパッケージ。
      • minicondaは anacondaの小さいバージョン。conda環境で必要最小限のパッケージ。
    • てか anacondaとは?
      • anacondaは、「データサイエンス向けのPythonパッケージなどを提供するプラットフォーム」
        • 科学技術計算などを中心とした、多くのモジュールやツールのコンパイル済みバイナリファイルを提供
        • 簡単にPythonを利用する環境を構築できる
      • anacondaとminiconda比較
        • anacondaは、パッケージ全部入り。とにかくデカイ。容量が大きい。
        • minicondaは、必要最小限のパッケージだけ。軽くてすぐはじめられる。
        • ただし両者とも M1 Mac(ARMアーキテクチャ)に非対応(2021年1月時点)
        • classmethodさんの記事参照
    • miniforgeは、minicondaの「M1 Mac対応版」と考えてよい
      • まとめると、
      • 「M1 Mac(ARMアーキテクチャ)に対応している、
      • 必要最小限のパッケージが揃った、
      • データ分析用Python 実行環境プラットフォーム」
      • https://github.com/conda-forge/miniforge

1-2-2.miniforgeインストール方法

  1. githubリポジトリ から「Miniforge3-MacOSX-arm64」をダウンロード
  2. ターミナルでコマンド bash Miniforge3-MacOSX-arm64.sh 叩く
  • いろいろ聞かれるがすべて「yes」でOK

condaの初期化処理が ~/.zshrc に書き込まれる

  • ~/.zshrc とは ターミナルひらくときに最初に読み込まれるファイル

  • 余談:シェルが zsh ではなく bashだったら .bashrc に該当する

    • シェルとは:ターミナルでコマンド実行するソフトウェア(みたいなもの)
    • macOS BigSurからデフォルトで シェルが zsh になった(いままではbash)
  • コマンド source ~/.zshrc で .zshrc を読み込める

    • するとcondaのbase環境が有効化される
      • コマンドラインの頭に(base)がつく
    • ターミナル立ち上げるたびに、condaのbase環境が起動するのが鬱陶しかったら下記コマンド叩く
      • conda config --set auto_activate_base false

1-2-3.conda の基本的なコマンド

  • まずは conda deactivate で 現在起動されてるconda環境を停止する

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環境起動後のコマンド

  • conda list で、その環境でインストール済みパッケージ表示
  • conda install ${package_name} でその環境にパッケージをインストール
    • 例)conda install jupyter
    • conda install python=x.x で 他のバージョンのpythonをインストールできる
  • conda deactivate で いま起動してるconda環境を停止
  • 詳しくは公式ドキュメント参照

1-3. condaでWebアプリ開発用の環境をつくろう

  • 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
    • その環境でインストール済みパッケージ表示.

1-4. djangoでローカルサーバーを起動しよう

  • django-admin startproject helloworld
    • 「helloworld」という名前のdjangoプロジェクトをつくる(フォルダが作成される)
  • cd helloworld
    • ディレクトリ移動
  • python manage.py migrate
    • マイグレート(おまじないみたいなもん. ここでは解説省きます🙇‍♂️)
  • python manage.py runserver
    • サーバー起動
  • http://127.0.0.1:8000/ へアクセス
    • ローカルサーバー起動してることを確認

②numpyやpandasを使ったデータ分析

  • ①で使ったminiforgeのcondaを前提にすすめるので、見てない方は①の「1-2. miniforgeでcondaをインストールしよう」から先に見てね

目次: データ分析

  • 2-1. condaでデータ分析用の環境をつくろう
  • 2-2. Jupyter Notebookを立ち上げて試そう

2-1. condaでデータ分析用の環境をつくろう

  • 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 で その環境にすべてインストールされているパッケージ確認

その環境にjupyter, numpy, pandas, matplotlib をインストール

  • 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

    • その環境でインストール済みパッケージ表示.
  • その他パッケージは 下記サイトから検索してインストール

2-2. Jupyter Notebookを立ち上げて試そう

  • 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])

③TensorFlowを使ったディープラーニング

目次:ディープラーニング

  • 3-1. tensorflow_macosでtensorflowをインストールしよう
  • 3-2. venvの仮想環境"tensorflow_macos_venv"を起動しよう
  • 3-3. kerasでmnist使って画像認識させてみよう

3-1. tensorflow_macosでtensorflowをインストールしよう

  • 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 がダウンロードされている

3-2. venvの仮想環境"tensorflow_macos_venv"を起動しよう

  • . ~/tensorflow_macos_venv/bin/activate
    • venvの仮想環境"tensorflow_macos_venv" を起動
      • どのディレクトリで実行してもOK
      • 起動したら コマンドラインの頭に(tensorflow_macos_venv) がつく
      • pythonのインタラクティブモードで import tensorflow が成功するか確認
      • deactivate でその環境を停止
  • pip freeze

3-3. kerasでmnist使って画像認識させてみよう

  • Keras のサンプルコードサイトにアクセス
    • CNNというニューラルネットワークを組んで, mnist(手書き数字のデータセット. 28x28が7万枚.)の書かれた数字を認識するタスク
  • ファイルを適当につくる(今回はsimple_mnist_convnet.py)
  • コピーアンドペースト
  • python simple_mnist_convnet.py
    • minist の「画像認識タスク(学習と検証)」実行

お疲れ様でした!!!

Discussion

murayamamurayama

M 1チップMacを使っているものです。tensorflowの導入にあたって色々と調べていたのですが、ネットの情報はintel版と混在していてワケが分からなくなっていました。そんな時に、この記事を見つけ、m1とIntelMacの環境構築の差が理解できました。

ありがとうございます!

AKAK

M1 Mac Python環境のベストプラクティス、最新版を教えてほしいです!!!!!