1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Macで研究開発環境をゼロから構築する完全ガイド(第3回)

1
Posted at

第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.cfg
  • bin
  • lib
  • include

などを一つひとつ確認しながら、

仮想環境がどのような仕組みで動作しているのか

を図解付きで解説します。

単にコマンドを実行するだけでなく、

「仮想環境とは何か」を理解することを目標に進めていきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?