第3回 Homebrew版Pythonへ移行する 〜Apple標準Pythonとの違いを理解する〜
対象読者
- Homebrewをインストールした方
- MacでPython開発を始めたい方
- Apple標準Pythonとの違いがよく分からない方
AI利用について
✍️ 本記事は 生成AI(ChatGPT)によって作成 されました。
誤りがあればコメント等でご指摘いただけると助かります。なお、本記事に含まれる内容については、執筆時点での情報に基づいています。
環境やソフトウェアのバージョンによって挙動が異なる場合があるため、必要に応じて公式ドキュメントもあわせて参照してください。
はじめに
前回は、自分のMac環境を調査する方法について解説しました。
その中で
which python3
を実行すると、
/usr/bin/python3
あるいは
/opt/homebrew/bin/python3
などが表示されることを確認しました。
今回は、その違いを理解しながら、
Homebrew版Pythonへ移行する理由
について詳しく解説します。
この記事では単に
brew install python
を実行するだけではなく、
- なぜHomebrew版Pythonを使うのか
- Apple標準版との違い
- PATHによってどちらが実行されるのか
まで理解することを目標にします。
Apple標準Pythonとは
macOSには最初からPythonがインストールされている場合があります。
例えば
which python3
を実行すると
/usr/bin/python3
と表示されることがあります。
これは
Appleが管理しているPython
です。
Appleは、このPythonを
- macOSの内部機能
- 開発ツール
- システムユーティリティ
などで利用しています。
つまり、
ユーザーが自由に開発するためのPythonではありません。
Apple標準Pythonを開発で使わない理由
それでは、
「最初からPythonが入っているなら、それを使えばいいのでは?」
と思うかもしれません。
確かに簡単なスクリプトを書く程度であれば問題ありません。
しかし、研究開発では次のような問題があります。
バージョンが古いことがある
Appleは安定性を重視しています。
そのため、
Pythonの最新バージョンが公開されても、
すぐには更新されません。
例えば
python3 --version
を実行すると
Python 3.9.6
となることがあります。
一方、
Homebrewでは
Python 3.14.x
のような最新バージョンを利用できます。
パッケージ管理が難しい
研究では
- NumPy
- SciPy
- Matplotlib
- pandas
- Jupyter
など、多数のライブラリを利用します。
Apple標準Pythonへ直接
pip install
を繰り返していくと、
どのライブラリを入れたのか分からなくなったり、
依存関係が壊れてしまうことがあります。
再現性が低くなる
研究では
「誰が実行しても同じ結果になる」
ことが非常に重要です。
しかし、
Apple標準PythonはmacOSのアップデートに影響を受ける可能性があります。
共同研究者と
- Pythonのバージョン
- ライブラリのバージョン
が一致しないことも珍しくありません。
Homebrew版Pythonとは
Homebrew版Pythonは、
Appleとは独立して管理されるPythonです。
インストールは非常に簡単です。
brew install python
これだけです。
しかし、
この1行の裏側では
Homebrewが
- Python本体
- pip
- 必要なライブラリ
- 実行ファイルへのリンク
などを自動的に管理しています。
つまり、
「Pythonをインストールする」
というより、
Homebrewの管理下にPythonを登録する
というイメージです。
HomebrewはどこへPythonをインストールするのか
Apple Silicon Macでは、
Homebrewは基本的に
/opt/homebrew
以下にソフトウェアをインストールします。
例えばPythonであれば、
実体は
/opt/homebrew/Cellar/python@3.14/3.14.x/
のような場所に配置されます。
そして、
実際に私たちが利用する
/opt/homebrew/bin/python3
は、
その実体へのシンボリックリンクになっています。
つまり、
python3
│
▼
/opt/homebrew/bin/python3
│
▼
Cellar/python@3.14/...
という構造になっています。
この仕組みによって、
HomebrewはPythonをアップデートしても、
利用者は
python3
というコマンドを変えずに使い続けることができます。
まずはPythonをインストールしてみる
Homebrew版Pythonをインストールするには、
次のコマンドを実行します。
brew install python
すでにインストール済みであれば、
最新版への更新状況が表示されます。
初めてインストールする場合は、
Python本体だけでなく、
pip など必要なツールもあわせて導入されます。
インストールが完了したら、次に本当にHomebrew版Pythonが利用できる状態になっているかを確認します。
その確認方法については、次の章で詳しく解説します。
Homebrew版Pythonが利用されているか確認する
Pythonのインストールが完了したら、まずは本当にHomebrew版Pythonが利用される状態になっているか確認しましょう。
環境構築では、
インストールしたことよりも、実際に利用されていることを確認すること
が重要です。
そこで、以下の3つのコマンドを実行します。
which python3
python3 --version
python3 -m pip --version
それぞれの役割を詳しく見ていきます。
① which python3
まずは
which python3
を実行します。
例えば
/opt/homebrew/bin/python3
と表示されれば、
現在利用されるPythonはHomebrew版です。
一方、
/usr/bin/python3
と表示された場合は、
まだApple標準版Pythonが利用されています。
つまり、このコマンドは
現在どのPythonが起動するのか
を確認するためのものです。
研究開発では複数のPythonがインストールされることも珍しくありません。
環境がおかしいと感じたら、まず最初に実行したいコマンドです。
② python3 --version
続いて
python3 --version
を実行します。
例えば
Python 3.14.6
のように表示されます。
ここで確認したいのは、
Pythonのバージョンだけではありません。
例えば
Python 3.9.6
であれば、
Apple標準Pythonである可能性があります。
一方、
Python 3.14.6
のように最新のバージョンであれば、
Homebrew版Pythonである可能性が高いでしょう。
もちろん、
最終的な判断は
which python3
で行います。
③ python3 -m pip --version
最後に
python3 -m pip --version
を実行します。
例えば
pip 26.1.2 from /opt/homebrew/lib/python3.14/site-packages/pip
と表示されれば、
Homebrew版Pythonに対応したpipが利用されています。
ここで重要なのは、
pip コマンドではなく、python3 -m pip を使っていることです。
なぜ「python3 -m pip」を使うのか
初心者向けの記事では、
次のように書かれていることがよくあります。
pip install numpy
確かに、この方法でもインストールできることがあります。
しかし、研究開発では
python3 -m pip install numpy
を使うことを強くおすすめします。
その理由は、
使用するPythonとpipを必ず対応させることができる
ためです。
例えば、
複数のPythonがインストールされている環境では、
python3
と
pip
が別々のPythonを指してしまう可能性があります。
例えば
python3
↓
Python 3.14
pip
↓
Python 3.9
という状況です。
この状態で
pip install numpy
を実行すると、
Python 3.9へインストールされてしまい、
Python 3.14では利用できません。
非常に多いトラブルです。
一方、
python3 -m pip install numpy
であれば、
python3
│
▼
そのPythonに対応するpip
│
▼
ライブラリをインストール
という流れになります。
つまり、
必ず現在利用しているPythonへライブラリがインストールされる
ことが保証されます。
そのため、
本シリーズでは今後も
python3 -m pip
を利用していきます。
python と python3 の違い
ここで、
もう一つ疑問が出てきます。
なぜ
python
ではなく
python3
なのでしょうか。
これはPythonの歴史に関係しています。
以前は
- Python 2
- Python 3
という2つの系統が存在していました。
そのため、
python
はPython 2、
python3
はPython 3
を意味していました。
Python 2は2020年にサポートが終了しましたが、
互換性のため、
現在でもmacOSやLinuxでは
python3
というコマンド名が利用されることが一般的です。
Homebrewでも、
実際にインストールされる実行ファイルは
python3
です。
Homebrewでは「python」コマンドも利用できる
Homebrew版Pythonをインストールすると、
次のようなメッセージが表示されます。
Unversioned symlinks `python`, `pip` etc. pointing to
`python3`, `pip3`
これは、
python
というコマンドも
python3
を呼び出すように設定できる、
という意味です。
つまり
python
│
▼
python3
というエイリアスのような役割を果たします。
ただし、
Linuxサーバーなどでは
python
が存在しない環境もあります。
そのため、
本シリーズでは環境による違いを避けるため、
常に
python3
を利用します。
これにより、
macOSだけでなくLinuxやWSLでも同じコマンドを利用できるようになります。
PATHの優先順位とPythonが切り替わる仕組み
ここまでで、
Homebrew版Pythonをインストールし、
which python3
で現在利用されるPythonを確認できることを学びました。
しかし、実際には
Homebrew版Pythonをインストールしたのに、Apple標準版Pythonが起動してしまう
という現象が起こることがあります。
実は私自身も、この問題に遭遇しました。
ここでは、その原因と解決方法を解説します。
私の環境で実際に起きたこと
Homebrew版Pythonをインストールしたあと、
次のように確認しました。
which python3
すると、
/usr/bin/python3
と表示されました。
さらに
python3 --version
では
Python 3.9.6
となっていました。
一方で、
Homebrewには確かにPythonがインストールされています。
brew list | grep python
python@3.14
つまり、
Homebrew版Pythonは存在しているにもかかわらず、
Apple標準版Pythonが起動している状態でした。
PATHを確認してみる
まず確認したのが
echo $PATH
です。
私の環境では
/opt/homebrew/bin
が
/usr/bin
より前にありました。
つまり、
PATHの設定自体は正しかったのです。
ここで、
「PATHが正しいのに、なぜApple版Pythonが起動するのだろう?」
という疑問が生まれました。
実はシェルは毎回PATHを検索していない
ここで登場するのが、
コマンドキャッシュ(Hash)
です。
実はzshやbashは、
毎回PATHを検索しているわけではありません。
例えば
python3
を初めて実行すると、
シェルは
PATH
↓
python3を検索
↓
場所を記憶
という処理を行います。
次回以降は、
毎回PATHを調べる代わりに、
記憶していた場所を利用します。
これは検索時間を短縮するための仕組みです。
イメージすると
通常は
python3
↓
PATHを見る
↓
/opt/homebrew/bin
↓
実行
ですが、
キャッシュされると
python3
↓
以前覚えた場所
↓
/usr/bin/python3
↓
実行
となります。
つまり、
PATHが変わっていても、
以前の情報を利用してしまうことがあるのです。
hash -rとは
このキャッシュを削除するのが
hash -r
です。
実行すると、
シェルは
「今まで覚えていたコマンドの場所を忘れる」
ようになります。
次回
python3
を実行すると、
改めてPATHを検索します。
つまり
python3
↓
キャッシュなし
↓
PATH検索
↓
/opt/homebrew/bin/python3
↓
実行
となります。
私の環境ではどうだったか
私のMacでも、
Homebrew版Pythonをインストールしたあと、
which python3
が
/usr/bin/python3
のままでした。
そこで
hash -r
を実行し、
もう一度
which python3
を実行すると、
/opt/homebrew/bin/python3
へ切り替わりました。
さらに
python3 --version
では
Python 3.14.6
となり、
Homebrew版Pythonが利用されていることを確認できました。
シェルを再起動しても同じ効果がある
実は
hash -r
を実行しなくても、
ターミナルを閉じて、
新しく開き直せば、
キャッシュは消えます。
つまり、
次の2つはほぼ同じ効果があります。
hash -r
または
ターミナルを再起動
ただし、
環境構築中は何度も確認することになるため、
私は
hash -r
を覚えておくことをおすすめします。
PATHが正しいのに切り替わらない場合
もし
echo $PATH
を見ると
/opt/homebrew/bin
が先頭にあるにもかかわらず、
Homebrew版Pythonへ切り替わらない場合は、
次の3点を確認しましょう。
① Homebrew版Pythonがインストールされているか
brew list | grep python
② 実行ファイルが存在するか
ls -l /opt/homebrew/bin/python3
③ コマンドキャッシュを削除する
hash -r
この3つを確認すれば、
ほとんどのケースは解決できます。
ここまでのポイント
この章では、
Homebrew版Pythonが利用されるまでの流れを学びました。
ポイントは次の3つです。
-
PATHの順番によって、どのPythonが実行されるか決まる - シェルは一度見つけたコマンドをキャッシュすることがある
-
hash -rを実行すると、キャッシュを削除して再検索できる
環境構築では、インストールしただけで安心するのではなく、
「実際にどのPythonが使われているか」を必ず確認する
という習慣が非常に重要です。
研究開発でのベストプラクティス
ここまで、Homebrew版Pythonの導入方法や、Apple標準Pythonとの違いについて解説してきました。
最後に、私が研究開発環境を構築する際に意識しているベストプラクティスを紹介します。
① Apple標準Pythonは変更しない
Apple標準のPythonは、macOSや開発ツールが利用している可能性があります。
そのため、
/usr/bin/python3
に対して直接ライブラリを追加したり、設定を変更したりすることはおすすめできません。
開発用のPythonは、Homebrew版や仮想環境を利用し、Apple標準環境とは分けて管理しましょう。
② Python本体はHomebrewで管理する
Python本体のインストールやアップデートは、Homebrewに任せるのがおすすめです。
例えば、Pythonを最新の状態に保ちたい場合は、
brew update
brew upgrade python
とするだけで管理できます。
どのバージョンをインストールしたのかを自分で意識する必要がなく、再現性の高い環境を維持できます。
③ ライブラリはグローバル環境へインストールしない
Homebrew版Pythonを導入したあとでも、
python3 -m pip install numpy
をそのまま実行し続けることはおすすめしません。
一見便利に思えますが、
時間が経つにつれて
- どのライブラリをインストールしたのか
- どのプロジェクトで必要だったのか
が分からなくなってしまいます。
そこで利用するのが、次回解説する**Python仮想環境(venv)**です。
④ Pythonの実行は「python3」を使う
現在では、
python
でもPython 3を起動できる環境が増えています。
しかし、Linuxやサーバー環境では
python3
しか存在しない場合もあります。
そのため、本シリーズでは
python3
を使用することを前提とします。
同様に、ライブラリのインストールも
python3 -m pip install
を利用します。
これにより、macOS・Linux・WSLなど、さまざまな環境で同じコマンドを利用できます。
⑤ 環境がおかしいと思ったら、まず確認する
Pythonが期待どおり動作しない場合、いきなり再インストールするのではなく、まず現在の環境を確認しましょう。
私が最初に実行するのは次の4つのコマンドです。
which python3
python3 --version
python3 -m pip --version
echo $PATH
この4つを確認するだけで、多くのトラブルの原因を特定できます。
環境構築では、
「設定を変更する前に、まず現状を確認する」
という習慣が非常に重要です。
まとめ
今回は、Homebrew版Pythonへの移行方法と、その背景にある仕組みについて学びました。
この記事で理解しておきたいポイントは次のとおりです。
- Apple標準Pythonはシステム用であり、開発用としてはHomebrew版を利用する
-
brew install pythonにより、HomebrewがPythonを管理する -
which python3やpython3 --versionを利用して、実際に使用されるPythonを確認する - ライブラリのインストールには
python3 -m pipを利用する - PATHの順番によって実行されるPythonが決まる
- シェルのキャッシュやPATHの設定により、期待どおりに切り替わらない場合がある
ここまで理解できれば、MacでPythonを利用するための土台は完成です。
しかし、まだ一つ問題があります。
それは、
すべてのプロジェクトで同じPython環境を共有してしまうこと
です。
研究では、プロジェクトごとに必要なライブラリやバージョンが異なることが珍しくありません。
この問題を解決するのが、Pythonの**仮想環境(venv)**です。
次回予告
次回は、
「Python仮想環境(venv)を仕組みから理解する」
をテーマに、
- なぜ仮想環境が必要なのか
-
python3 -m venv .venvが実際には何をしているのか -
.venvディレクトリの中身 pyvenv.cfgbinlibinclude
などを一つひとつ確認しながら、
仮想環境がどのような仕組みで動作しているのか
を図解付きで解説します。
単にコマンドを実行するだけでなく、
「仮想環境とは何か」を理解することを目標に進めていきます。