はじめに
書くこと
MacBookにPythonをインストールする方法が複数ありますが、それぞれのインストール方法とPATHの違いを解説します。
MacへPythonをインストールする方法ですが、ひとつではありません。
ネット上に様々なインストール方法が掲載されており、どれを参考にしてよいのか混乱したため、3つの方法についてまとめてみたいと思います。
なぜ今さらこんなことを書くのか
今までPythonの開発(勉強)に統合開発環境(IDE)であるAnacondaを使用してきました。
Anacondaを使用すれば、Pythonやライブラリを含めてインストールできるため、Pythonインストールについて細かく確認しませんでした。
しかしこのたび、Visual Studio Codeに乗り換えるため、Python自体のインストール方法を調べることになりました。
ちょっと補足
Macにデフォルトで入っているPython
まず、自分が使用しているMacのバージョンは「12.3.1」です。
MacにデフォルトでインストールされているPythonがあります。
デフォルトのPythonは/usr/bin/python3
(僕のMacの場合)にインストールされており、バージョンは「3.8.9」でした(こちらも僕のMacの場合)。
このデフォルトでインストールされたPythonを使うのではなく、新たにインストールするPythonをVS Codeで使いたいため、Pythonのインストール方法について調べることになりました。
解説
Pythonの3種類のインストール方法
大きく分けて以下の3つがあると思います。これらについて取り上げます。
- パッケージからのインストール
- Homebrewからのインストール
- pyenvからのインストール
それぞれのインストール方法と、インストールされる場所(PATHを通す場所)について見ていきます。
パッケージでインストール
python.orgからインストーラーをダウンロードして、実行することによりインストールする方法です。
ここでは、Python 3.9.13のインストーラーを実行してみました。
/Applications
ディレクトリにPython 3.9
ディレクトリが作成されるのもパッケージからのインストールの特徴です。
Python実行ファイルは/Library/Frameworks/Python.framework
に作られます。
% ls -lt /Library/Frameworks/Python.framework
total 0
drwxrwxr-x 4 root wheel 128 6 25 16:33 Versions
lrwxr-xr-x 1 root wheel 24 6 25 16:33 Headers -> Versions/Current/Headers
lrwxr-xr-x 1 root wheel 26 6 25 16:33 Resources -> Versions/Current/Resources
lrwxr-xr-x 1 root wheel 23 6 25 16:33 Python -> Versions/Current/Python
実行ファイルへのシンボリックリンクは/usr/local/bin
に作られます。以下が作成されたもの。
% ls -lt /usr/local/bin
total 0
lrwxrwxr-x 1 root admin 66 6 25 16:33 pip3 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/pip3
lrwxrwxr-x 1 root admin 68 6 25 16:33 pip3.9 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/pip3.9
lrwxr-xr-x 1 root wheel 68 6 25 16:33 pydoc3 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/pydoc3
lrwxr-xr-x 1 root wheel 70 6 25 16:33 2to3-3.9 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/2to3-3.9
lrwxr-xr-x 1 root wheel 79 6 25 16:33 python3.9-intel64 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9-intel64
lrwxr-xr-x 1 root wheel 69 6 25 16:33 idle3.9 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/idle3.9
lrwxr-xr-x 1 root wheel 70 6 25 16:33 pydoc3.9 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/pydoc3.9
lrwxr-xr-x 1 root wheel 76 6 25 16:33 python3-config -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/python3-config
lrwxr-xr-x 1 root wheel 71 6 25 16:33 python3.9 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9
lrwxr-xr-x 1 root wheel 78 6 25 16:33 python3.9-config -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9-config
lrwxr-xr-x 1 root wheel 67 6 25 16:33 idle3 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/idle3
lrwxr-xr-x 1 root wheel 69 6 25 16:33 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/python3
lrwxr-xr-x 1 root wheel 66 6 25 16:33 2to3 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/2to3
lrwxr-xr-x 1 root wheel 77 6 25 16:33 python3-intel64 -> ../../../Library/Frameworks/Python.framework/Versions/3.9/bin/python3-intel64
(以下省略)
ですので、PATHを通すときは、/usr/bin
よりも/usr/local/bin
が優先して読み込まれるように設定する必要がありそうです。
ちなみに、Macには/etc/paths
というファイルがあり、このファイルからもPATHが設定されています。自分の環境では以下のようになっていました。
% cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
の方が/usr/bin
よりも優先的に読み込まれる設定となっています。
なので、追加のPATHの設定は特にせずに、ターミナルを再起動すればよさそうです。やってみます。
デフォルトの「3.8.9」から「3.9.13」になっています。
また、パッケージからのインストールの場合には~/.zprofile
に以下が自動で追記されます。
# Setting PATH for Python 3.9
# The original version is saved in .zprofile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.9/bin:${PATH}"
export PATH
whichコマンドを実行した結果も載せておきます。
【アンインストール】パッケージからインストールした場合
ここらへんが参考になりました。
Macにインストールした公式Python3をアンインストールする方法
Homebrewでインストール
Homebrewとはパッケージ管理システムのひとつです。デフォルトではインストールされていませんので、Homebrewからインストールします。
HomebrewからインストールできるPythonのバージョンを検索します。”@”がついているものがインストール可能なバージョンです。
% brew search python
==> Formulae
app-engine-python ipython python-launcher python-tk@3.9 python@3.8 pythran
boost-python3 libpython-tabulate python-markdown python-yq python@3.9 jython
bpython micropython python-tabulate python@3.10 reorder-python-imports cython
gst-python ptpython python-tk@3.10 python@3.7 wxpython
==> Casks
awips-python mysql-connector-python
If you meant "python" specifically:
It was migrated from homebrew/cask to homebrew/core.
ここではpython@3.9
をインストールしてみます。
% brew install python@3.9
Running `brew update --auto-update`...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
evernote-backup lexicon
==> New Casks
gama gama-jdk
You have 2 outdated formulae installed.
You can upgrade them with brew upgrade
or list them with brew outdated.
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.9/manifests/3.9.13_1
Already downloaded: /Users/atsushi/Library/Caches/Homebrew/downloads/874a1eda6b1ec5f181fd49612cff538012a071e86355c55174d01f3eb6d3fe96--python@3.9-3.9.13_1.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.9/blobs/sha256:2e02d1c12a0baecc8b1af05701c7db8038e6b9a7bf453cc49992eef74c268f7b
Already downloaded: /Users/atsushi/Library/Caches/Homebrew/downloads/c31e2636906b2ecbca22aea377baa370b942747cabe5b0ceac48379f21ec9556--python@3.9--3.9.13_1.arm64_monterey.bottle.tar.gz
==> Pouring python@3.9--3.9.13_1.arm64_monterey.bottle.tar.gz
==> /opt/homebrew/Cellar/python@3.9/3.9.13_1/bin/python3 -m ensurepip
==> /opt/homebrew/Cellar/python@3.9/3.9.13_1/bin/python3 -m pip install -v --no-deps --no-index --upgrade --isolated --target=/opt/homebrew/lib/python3.9/site-packages /opt/homebr
==> Caveats
Python has been installed as
/opt/homebrew/bin/python3
Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
/opt/homebrew/opt/python@3.9/libexec/bin
You can install Python packages with
pip3 install
They will install into the site-package directory
/opt/homebrew/lib/python3.9/site-packages
tkinter is no longer included with this formula, but it is available separately:
brew install python-tk@3.9
See: https://docs.brew.sh/Homebrew-and-Python
==> Summary
🍺 /opt/homebrew/Cellar/python@3.9/3.9.13_1: 3,088 files, 57.6MB
==> Running `brew cleanup python@3.9`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
インストールログにPython has been installed as /opt/homebrew/bin/python3
と書いてあります。
/opt/homebrew/bin
の中を見てみます。以下が新しく貼られたシンボリックリンクです。実行ファイルは/opt/homebrew/Cellar/python@3.9/3.9.13_1/bin
にありました。
% ls -lt /opt/homebrew/bin
total 16
lrwxr-xr-x 1 atsushi admin 40 6 25 17:44 pip3.9 -> ../Cellar/python@3.9/3.9.13_1/bin/pip3.9
lrwxr-xr-x 1 atsushi admin 40 6 25 17:44 wheel3 -> ../Cellar/python@3.9/3.9.13_1/bin/wheel3
lrwxr-xr-x 1 atsushi admin 38 6 25 17:44 pip3 -> ../Cellar/python@3.9/3.9.13_1/bin/pip3
lrwxr-xr-x 1 atsushi admin 50 6 25 17:44 python3.9-config -> ../Cellar/python@3.9/3.9.13_1/bin/python3.9-config
lrwxr-xr-x 1 atsushi admin 43 6 25 17:44 python3.9 -> ../Cellar/python@3.9/3.9.13_1/bin/python3.9
lrwxr-xr-x 1 atsushi admin 48 6 25 17:44 python3-config -> ../Cellar/python@3.9/3.9.13_1/bin/python3-config
lrwxr-xr-x 1 atsushi admin 41 6 25 17:44 python3 -> ../Cellar/python@3.9/3.9.13_1/bin/python3
lrwxr-xr-x 1 atsushi admin 42 6 25 17:44 pydoc3.9 -> ../Cellar/python@3.9/3.9.13_1/bin/pydoc3.9
lrwxr-xr-x 1 atsushi admin 40 6 25 17:44 pydoc3 -> ../Cellar/python@3.9/3.9.13_1/bin/pydoc3
lrwxr-xr-x 1 atsushi admin 41 6 25 17:44 idle3.9 -> ../Cellar/python@3.9/3.9.13_1/bin/idle3.9
lrwxr-xr-x 1 atsushi admin 39 6 25 17:44 idle3 -> ../Cellar/python@3.9/3.9.13_1/bin/idle3
lrwxr-xr-x 1 atsushi admin 42 6 25 17:44 2to3-3.9 -> ../Cellar/python@3.9/3.9.13_1/bin/2to3-3.9
lrwxr-xr-x 1 atsushi admin 38 6 25 17:44 2to3 -> ../Cellar/python@3.9/3.9.13_1/bin/2to3
(以下省略)
/opt/homebrew/bin/
の中にPython実行ファイルへのシンボリックがあるので、この場合、/usr/bin
よりも/usr/homebrew/bin
が優先的に読み込まれる必要があります。
~/.zshrc
や~/.zprofile
にexport PATH=/opt/homebrew/bin:$PATH
を記述してもダメでした。/usr/bin
が優先的に読み込まれてしまいます。
なので/etc/paths
の1行目に/opt/homebrew/bin
を追記します。
% cat /etc/paths
/opt/homebrew/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
こうすることで、/opt/homebrew/bin
下のシンボリックリンクが読み込まれるようになりました。
whichコマンドの結果も載せておきます。
【アンインストール】Homebrewでインストールした場合
コマンド一発でアンインストールできます。
% brew uninstall python@3.9
Uninstalling /opt/homebrew/Cellar/python@3.9/3.9.13_1... (3,088 files, 57.6MB)
もし/etc/paths
や~/.zshrc
や~/.zprofile
を編集した場合は、必要に応じて元に戻しておいてください。
pyenvでインストール
個人的には、このインストール方法が一番いいと思っています。
理由は3つ。
- 複数のバージョンのPythonがインストールされた環境で、簡単に切り替えを行うことができる。
/etc/paths
を編集する必要がない。- コマンドでアンインストールできる。
まず、pyenvをインストールします。Homebrewを使ってインストールします。
% brew install pyenv
==> Downloading https://ghcr.io/v2/homebrew/core/pyenv/manifests/2.3.1
Already downloaded: /Users/atsushi/Library/Caches/Homebrew/downloads/9271fe4e21f56627d5912a0b7a741ea3cee61865c48d478e1739c57087c0905b--pyenv-2.3.1.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/pyenv/blobs/sha256:89707dc2d5d540ff8d5a292623a8c513d59e982499d3f8095155f7f2e1ccc455
Already downloaded: /Users/atsushi/Library/Caches/Homebrew/downloads/45a4bc962bf5109ea65493658b8f281cc141964aa66bff6baf458deba2b0bf12--pyenv--2.3.1.arm64_monterey.bottle.tar.gz
==> Pouring pyenv--2.3.1.arm64_monterey.bottle.tar.gz
🍺 /opt/homebrew/Cellar/pyenv/2.3.1: 925 files, 3MB
==> Running `brew cleanup pyenv`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
pyenvコマンドを使用してPython 3.9.13をインストールしてみます。
% pyenv install 3.9.13
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.9.13.tar.xz...
-> https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tar.xz
Installing Python-3.9.13...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.9.13 to /Users/atsushi/.pyenv/versions/3.9.13
インストールログにInstalled Python-3.9.13 to /Users/atsushi/.pyenv/versions/3.9.13
と書かれている通り、pyenvの場合は~/.pyenv/versions/3.9.13
にインストールされるようです。
~/.pyenv/versions/3.9.13/bin
の中を見てみます。
% ls -l ~/.pyenv/versions/3.9.13/bin
total 7424
lrwxr-xr-x 1 atsushi staff 8 6 25 18:36 2to3 -> 2to3-3.9
-rwxr-xr-x 1 atsushi staff 128 6 25 18:36 2to3-3.9
lrwxr-xr-x 1 atsushi staff 7 6 25 18:36 idle -> idle3.9
lrwxr-xr-x 1 atsushi staff 7 6 25 18:36 idle3 -> idle3.9
-rwxr-xr-x 1 atsushi staff 126 6 25 18:36 idle3.9
lrwxr-xr-x 1 atsushi staff 6 6 25 18:36 pip -> pip3.9
-rwxr-xr-x 1 atsushi staff 256 6 25 18:36 pip3
-rwxr-xr-x 1 atsushi staff 256 6 25 18:36 pip3.9
lrwxr-xr-x 1 atsushi staff 8 6 25 18:36 pydoc -> pydoc3.9
lrwxr-xr-x 1 atsushi staff 8 6 25 18:36 pydoc3 -> pydoc3.9
-rwxr-xr-x 1 atsushi staff 111 6 25 18:36 pydoc3.9
lrwxr-xr-x 1 atsushi staff 9 6 25 18:36 python -> python3.9
lrwxr-xr-x 1 atsushi staff 16 6 25 18:36 python-config -> python3.9-config
lrwxr-xr-x 1 atsushi staff 9 6 25 18:36 python3 -> python3.9
lrwxr-xr-x 1 atsushi staff 16 6 25 18:36 python3-config -> python3.9-config
-rwxr-xr-x 1 atsushi staff 3710935 6 25 18:36 python3.9
-rwxr-xr-x 1 atsushi staff 2070 6 25 18:36 python3.9-config
-rwxr-xr-x 1 atsushi staff 65501 6 25 18:36 python3.9-gdb.py
pyenvの場合のPATHの通し方は以下になります。(参考サイトに助けられました。ありがとうございました!)
% echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
% echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
% echo 'eval "$(pyenv init -)"' >> ~/.zprofile
ターミナルを再起動してwhichコマンドを実行してみます。
PATHが通っています。
【アンインストール】pyenvでインストール
こちらもコマンド一発でアンインストールできます。
% pyenv uninstall 3.9.13
pyenv: remove /Users/atsushi/.pyenv/versions/3.9.13? [y|N] y
pyenv: 3.9.13 uninstalled
~/.zprofile
に追記したものは適宜削除いただければと思います。
最後に
Pythonのセットアップには苦しまされました。
色んなインストールの方法があるとは。。(個人的にはひとつであってほしい)
参考になれば幸いです。あらためて、参考サイトの執筆者の方々に感謝申し上げます。
さあプログラミング!(あ、VS Codeのセットアップがまだだ。。。)
コメント
コメント一覧 (3件)
「macOS 12.3 Monterey」で、Python 2.7のランタイムを削除されたためデフォルトのpythonがなくなったようです。ライトユーザーなのでわざわざインストールしないで使ってたのですが、そんなわけでここに流れ着きました。
ああ、ごめんなさい。python3は入ってました。pythonというコマンドが無くなったのでパニックになっていたようです。
承知しました。最近は”python3″コマンドですね。
コメントありがとうございます。