macOSでPythonを使おうとする時、様々な選択肢があります。
- Apple純正のPython
- HomebrewのPython
- AnacondaのPython
- Python.orgのPython
まず、それぞれのインストール方法とそのPythonのパスを明確にします。バージョンは2024年1月現在のものになります。
Apple純正のPython
- インストール
Apple純正のPythonは xcode-select でインストールされますxcode-select --install
- パス
Apple純正のPythonのパスは /usr/bin/python3 です
私の環境 (macOS 13.6.3) では以下のようになりました
$ /usr/bin/python3 Python 3.9.6 (default, Sep 26 2022, 11:37:49) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin
HomebrewのPython
- インストール
HomebrewのPythonは brew install でインストールされますbrew install python3
- パス
HomebrewのPythonのパスは /usr/local/Cellar/python@3.11/3.11.7_1/bin/python3 であり、シンボリックリンクが /usr/local/bin/python3 に貼られます。後述しますが、python.org本家も同じところに作ってくるのでコンフリクトが起こります$ /usr/local/Cellar/python\@3.11/3.11.7_1/bin/python3 Python 3.11.7 (main, Dec 4 2023, 18:10:11) [Clang 15.0.0 (clang-1500.1.0.2.5)] on darwin
AnacondaのPython
- インストール
Anacondaは、公式サイト(https://www.anaconda.com/download)でインストーラーをダウンロードし、インストールします -
パス
Anacondaは、ユーザーディレクトリの下のanaconda3にインストールされます$ /Users/ユーザー名/anaconda3/bin/python3 Python 3.11.5 (main, Sep 11 2023, 08:19:27) [Clang 14.0.6 ] on darwin
なお、別のポストで書きますが、Anacondaはインストールすると、このバージョンのPythonを使うように設定されます。その際は、ターミナルの前に (base) とつきます
Python.orgのPython
-
インストール
Python本家のPythonは、公式サイト(https://www.python.org/)からインストーラーをダウンロードし、ダウンロードします -
パス
Python本家のPythonのパスは、/Library/Frameworks/Python.framework/Versions/3.12/bin/python3 になります/Library/Frameworks/Python.framework/Versions/3.12/bin/python3 Python 3.12.1 (v3.12.1:2305ca5144, Dec 7 2023, 17:23:39) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
そして、/usr/local/bin/python3 にシンボリックリンクがはられます
そのほか、脳画像解析で FSL や FreeSurfer を使っている方は、以下に python3 が入っています
FSLのPython
- パス
FSLのPythonはバージョン 6.0.6 以降では、/usr/local/fsl/bin/python3 となります。$ /usr/local/fsl/bin/python3 Python 3.11.6 | packaged by conda-forge | (main, Oct 3 2023, 10:40:37) [Clang 15.0.7 ] on darwin
FreeSurferのPython
-
パス
FreeSurferのPythonは、/usr/local/freesurfer/7.4.1/ となります。
$ /usr/local/freesurfer/7.4.1/python/bin/python3 Python 3.8.13 (default, Apr 21 2022, 12:55:06) [Clang 12.0.0 (clang-1200.0.32.29)] on darwin
自分がどのPythonを使っているのか
自分がどのPythonを使っているのかを意識することは大事です。なぜならば、様々なモジュールは今、自分が使っているPythonに関連するディレクトリにインストールされていくからです
- which か command -v でどのpython3が使われるのかを知ることができます
$ which python3 /Library/Frameworks/Python.framework/Versions/3.12/bin/python3
- 今は、Python本家のPython3が使われていることがわかります
Anacondaと他のPythonのコンフリクト
Anacondaと他のPythonがコンフリクトを起こすことがあります。例えば、以下のような感じです。
(base) foo@macbook:~$ which python3 /Library/Frameworks/Python.framework/Versions/3.12/bin/python3
なんでこんな事が起きるのでしょうか。これは、.bash_profile, もしくは .zprofile に記載される順番になります。
今の場合、私は、Anacondaを入れてからPython.orgのPythonをインストールしました。その場合の .bash_profile は以下のようになっています。
# >>>conda initialize<<< # !! Contents within this block are managed by 'conda init' !! __conda_setup="$('/Users/foo/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/Users/foo/anaconda3/etc/profile.d/conda.sh" ]; then . "/Users/foo/anaconda3/etc/profile.d/conda.sh" else export PATH="/Users/foo/anaconda3/bin:$PATH" fi fi unset __conda_setup # >>>conda initialize<<< # Setting PATH for Python 3.12 # The original version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/3.12/bin:${PATH}" export PATH
"conda initialize" で括られている部分が Anaconda の設定です。ここで、condaが実行され、Anacondaの仮想環境が起動したうえで(これは別に記事を書きます)、最後に、"/Users/foo/anaconda3/bin" がパスの最初に来るように設定されています。
その次に Python 3.12 の設定がきます。そして、パスの最初に"/Library/Frameworks/Python.framework/Versions/3.12/bin" が設定されています。
これによって、Anacondaの仮想環境が立ち上がっているにもかかわらず、python3を実行すると、Python3の本家が起動するという複雑な状況がいとも簡単に成り立ってしまうわけです。
実際、パスを確認すると以下のようになっていました。
/Library/Frameworks/Python.framework/Versions/3.12/bin:/Users/foo/anaconda3/bin:/Users/foo/anaconda3/condabin: /usr/local/freesurfer/7.4.1/bin:/usr/local/freesurfer/7.4.1/fsfast/bin:/usr/local/fsl/share/fsl/bin: /usr/local/fsl/share/fsl/bin:/usr/local/freesurfer/7.4.1/mni/bin:/usr/local/bin:/usr/local/sbin: /usr/local/fsl/share/fsl/bin:/usr/local/fsl/share/fsl/bin:/usr/local/bin: /System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin: /var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin: /var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin: /var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin: /Users/foo/bin
ということで、興味本位で色々なバージョンのpythonを入れると、大変なことになることがよくわかります。ただし、pythonには仮想環境というとても良い方法が備わっているので、それを使うことで、色々な問題を解決できます。これは、次のブログの記事に書きます。
なお、FSLとFreeSurferを入れた方は、FSLの python がパスの最初に来るようになってしまい、FSLの python3 が起動してしまいます。この対処法は、こちらのポストに記載しました。
長々と書きましたが、要点としては、以下になりますでしょうか。
- Python3は色々なところにインストールされている
- which や command -v でどのpythonを使っているか確認することは必須
- .bash_profile や .zprofile の記載を確認することで優先順位を理解できる
- パスを確認し、どのパスが優先順位が高いかを確認するのも良い
- 綺麗な環境を作るには、仮想環境を構築するのがよい
Pythonについての混乱が少し解けた気がしました。
ピングバック: LinuxやmacOSでPythonの仮想環境を構築する方法