この記事は最終更新日から1年以上が経過しています。情報が古くなっている可能性があります。
MacBook に Python 環境を導入していたが、macOS には Python2 (サポート終了済み) が標準で入ってるのに Python3 は入ってなかったりとごちゃごちゃとした状態だったので、Python3 をインストールしてデフォルトの Python に設定してみるメモ。
注意
この記事では Python3 を導入し、macOS に標準で付属している Python2 をできるだけ置き換える(封印する)方向で設定します(Python3 が python
コマンドで実行できる状態にする)。
作業は macOS Mojave / MacBook Air 2018 上で設定しています。
一部間違いが含まれている可能性もあるため、作業はすべて自己責任にて行ってください。
なお、Homebrew はすでに入っていて Python3 はインストールされていないものとして進めます。
状態を確認する
まずは現在の状態を確認。
ターミナル(ここでは iTerm を使う)を開き、
$ python -V
Python 2.7.16
と実行する。
Python 2.7.16
のように表示される場合は Python2 がインストールされている。
$ which python
/usr/bin/python
と実行し、/usr/bin/python
と表示されていれば macOS 標準の Python2 がインストールされている。
Homebrew でインストールしたソフトは標準では /usr/local/bin
ディレクトリ (フォルダ) 以下にインストールされる(場所は変更することもできる)ので、/usr/bin
以下にインストールされているため標準で入っている Python2 である事が推測できる。
標準の Python2 用の pip をアンインストールする
標準でインストールされている Python2 用の pip が入っている場合(標準で入ってたかどうかわすれた)、念のためアンインストールしておこう(参考)。
もし pip がインストールされていない場合はこの手順は飛ばして構わない。
アンインストールは必須ではないが、Python3 を使うので Python2 の pip は使わないし、標準の Python2 用の pip パッケージがインストールされる場所の関係で pip install は sudo をつけて管理者権限で実行しないとインストールできないため、仮に Python2 が必要な場合でも使うのはおすすめしない。
$ sudo easy_install -mxN pip
Searching for pip
Best match: pip 20.2b1
Processing pip-20.2b1-py2.7.egg
Using /Library/Python/2.7/site-packages/pip-20.2b1-py2.7.egg
Because this distribution was installed --multi-version, before you can
import modules from this package in an application, you will need to
'import pkg_resources' and then use a 'require()' call similar to one of
these examples, in order to select the desired version:
pkg_resources.require("pip") # latest installed version
pkg_resources.require("pip==20.2b1") # this exact version
pkg_resources.require("pip>=20.2b1") # this version or higher
上記のコマンドを実行し、参照を解除する。
このとき、実行結果内にある pip のバージョンを確認しておこう(この場合は 20.2b1)。
$ sudo rm -rf /Library/Python/2.7/site-packages/pip-20.2b1-py2.7.egg
と実行し、pip をアンインストールする。
上記のコマンドでは pip-20.2b1-py2.7.egg
となっているが、20.2b1
の部分は適宜自分の pip バージョンに合わせて書き換えてから実行する。
最後に、/usr/local/bin
においてある pip
・pip2
・pip2.7
といったコマンドを削除する。
$ sudo rm -rf /usr/local/bin/pip*
と実行しよう。
/usr/bin/python
を /usr/bin/python2
にリネームできないかやってみたが、システム整合性保護 (SIP) で守られているらしく「Operation not permitted」という見たことないエラーが出て案の定ダメだった。Homebrew で Python3 をインストールする
Homebrew で Python3 をインストールする。
Python の公式サイトから .pkg をダウンロードしてきてインストールすることもできるが、アンインストールが結構面倒だったりするのであまりおすすめしない(参考)。
$ brew install python
と実行する。
$ python3 -V
Python 3.7.7
と実行し、Python 3.7.7
と表示されれば OK(3.7.7 の部分はインストールしたバージョンによって変わる)。
Python3 をデフォルトに設定する
Homebrew でインストールした場合、macOS 標準で用意されている python コマンド (Python2) と衝突しないようにするためか、上記のように Python3 は python3
コマンド、Python3 用の pip は pip3
コマンドとなっているが、これを python
・pip
コマンドだけで Python3 が実行できるようにしてみる。
このうち pip は先程アンインストールしているが、pip コマンド
alias を ~/.bash_profile に登録する方法がメジャーだが、ここでは別の方法でやってみる。
$ python -V
Python 2.7.16
$ python3 -V
Python 3.7.7
この時点で、python -V
と実行すると macOS 組み込みの Python2 が、python3 -V
と実行すると Homebrew でインストールした Python3 が実行される状態のはず。
/Library/Frameworks/Python.framework/Versions/3.7/bin
) が、Python3 を python
コマンドではなく python3
コマンドで実行する点は変わらない。python3
や pip3
といったコマンドは /usr/local/Cellar/python/3.7.7/bin
以下にインストールされていて、環境変数 $PATH
が通っている /usr/local/bin
以下に実行ファイルへのシンボリックリンクが貼られている。
たとえば、/usr/local/bin/python3
は /usr/local/Cellar/python/3.7.7/bin/python3
へのシンボリックリンクになっている。
これを利用し、/usr/local/bin/python3
へのシンボリックリンク、 /usr/local/bin/python
を作ることで python -V
と実行したときに Python3 を呼び出すようにする。
環境変数 $PATH は(少なくとも私の環境では)/usr/local/bin
が macOS 組み込みの Python2 が入っている /usr/bin
よりも左側に設定されている($PATH
は左側に書かれているパスほど優先されるらしい)ため、/usr/bin
にある python ではなく /usr/local/bin
にある python が使われる。
printenv PATH
と実行すると表示できる。$ ln -nfs /usr/local/bin/python3 /usr/local/bin/python
と実行し、シンボリックリンクを作成する。
$ ln -nfs /usr/local/bin/pip3 /usr/local/bin/pip
$ ln -nfs /usr/local/bin/easy_install-3.7 /usr/local/bin/easy_install
$ ln -nfs /usr/local/bin/idle3 /usr/local/bin/idle
$ ln -nfs /usr/local/bin/pydoc3 /usr/local/bin/pydoc
$ ln -nfs /usr/local/bin/python3-config /usr/local/bin/python-config
$ ln -nfs /usr/local/bin/wheel3 /usr/local/bin/wheel
pip3
などの Python3 と同時にインストールされるコマンドのシンボリックリンクも同時に作成しておく。
念のため、ターミナルを閉じてもう一度起動する。
$ python -V
Python 3.7.7
$ pip -V
pip 20.0.2 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
実行してみて、Python 3.7.7 のようになっていれば OK。
$ which python
/usr/local/bin/python
$ which pip
/usr/local/bin/pip
which
コマンドでパスを調べると /usr/local/bin
以下に配置されていることが確認できる。
Python3 環境の導入は以上で終了。よき Python ライフを(?)
コメント