Python3を使えるようにするために
Macには標準でPythonが入っていますが、バージョンが2と古く、そのまま使うのは非推奨です。古いプロジェクトであれば2を使いますが、世の中の多くは3をベースに動いていますので、3に合わせましょう。
本稿は環境によって差異が出る内容となっています。
コマンドを安易にコピペせず、よく確認の上作業をお願いします。(責任は負いかねます)
誤りがありましたら、コメントでのご指摘をお願いします。
Homebrewを入れる
まずはともあれ、Homebrewを入れましょう。
これはパッケージ管理アプリケーションという類のもので、パッケージ(今回でいうとPython3がこれにあたります)の管理をいい感じにやってくれます。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
きちんと入ったことを確認するために、version確認をしましょう。
brew --version
Homebrew <version>
上記のようになればOKです。
Pythonをインストールする。
特にこだわりがなければ、Pythonの最新版をインストールしましょう。
brew install python
終わったら、もちろんversion確認を。
python -V
python 2.7
こうなっているはずです。
実はここが落とし穴!
brew install python
をした時のログ(多分めっちゃ長い)ですが、python3.12とか「python3.*」が書かれているはずです。
Macには元々Python2が入っていて、そっちが参照されちゃっている状態です。
ここままでは、せっかくインストールしたPython3が使えず、python2を使うことになります。
(それでも問題はなくないですが、、、今回の主題は”Python3がつかえるようになろー”です。)
これを、インストールしたPython3に変えていきましょう。
Python2からPython3に変更する。
まずは、Pythonがどこにあるのかを見ましょう。
where python
/usr/local/bin/python
環境によっては少し表記が違うかもしれません。
出力された内容に後述の内容を読み替えてください。
Pythonは/usr/local/bin
というパスにいることはわかりました。
Mac(ひいてはLinux,UNIX)のコマンドは、ディレクトリのどこかにファイルとして存在しています。
Python、というコマンドを打つと、このパスから参照されます。(今回はコマンドの参照については割愛します)
では、このPATHに移動しましょう。
cd /usr/local/bin
ここで
ls
するとかなりの数の出力が出ると思います。今回参照したいのはPythonだけなので、絞りましょう。
ls -l | grep python
すると、pythonの関連のエイリアスがたくさん並んでいる画面になったと思います。
lrwxr-xr-x 1 <user name> admin 42 9 3 01:31 2to3-3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/2to3-3.9
lrwxr-xr-x 1 <user name> admin 41 9 3 01:31 idle3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/idle3.9
lrwxr-xr-x 1 <user name> admin 48 9 3 03:15 pip -> /usr/local/Cellar/python@3.9/3.9.19_1/bin/pip3.9
lrwxr-xr-x 1 <user name> admin 40 9 3 01:32 pip3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/pip3.9
lrwxr-xr-x 1 <user name> admin 42 9 3 01:31 pydoc3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/pydoc3.9
lrwxr-xr-x 1 <user name> admin 43 9 3 02:49 python -> ../Cellar/python@3.9/3.9.19_1/bin/python3.9
lrwxr-xr-x 1 <user name> admin 38 7 6 14:04 python-build -> ../Cellar/pyenv/2.4.5/bin/python-build
lrwxr-xr-x 1 root wheel 75 6 24 2022 python-config -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python-config
lrwxr-xr-x 1 root wheel 69 6 24 2022 python2 -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2
lrwxr-xr-x 1 root wheel 76 6 24 2022 python2-config -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2-config
lrwxr-xr-x 1 root wheel 71 6 24 2022 python2.7 -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
lrwxr-xr-x 1 root wheel 78 6 24 2022 python2.7-config -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
lrwxr-xr-x 1 root wheel 70 11 3 2022 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3
lrwxr-xr-x 1 root wheel 77 11 3 2022 python3-config -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3-config
lrwxr-xr-x 1 root wheel 78 11 3 2022 python3-intel64 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3-intel64
lrwxr-xr-x 1 root wheel 73 11 3 2022 python3.11 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11
lrwxr-xr-x 1 root wheel 80 11 3 2022 python3.11-config -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11-config
lrwxr-xr-x 1 root wheel 81 11 3 2022 python3.11-intel64 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11-intel64
lrwxr-xr-x 1 <user name> admin 43 9 3 01:31 python3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/python3.9
lrwxr-xr-x 1 <user name> admin 50 9 3 01:31 python3.9-config -> ../Cellar/python@3.9/3.9.19_1/bin/python3.9-config
-rwxr-xr-x 1 <user name> admin 28640 9 3 02:36 python_bk
lrwxr-xr-x 1 root wheel 69 6 24 2022 pythonw -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw
lrwxr-xr-x 1 root wheel 70 6 24 2022 pythonw2 -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2
lrwxr-xr-x 1 root wheel 72 6 24 2022 pythonw2.7 -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7
lrwxr-xr-x 1 <user name> admin 42 9 3 01:32 wheel3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/wheel3.9
この中で重要なのは、以下の1行です。
lrwxr-xr-x 1 root wheel 68 6 24 2022 python -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python
文中に->
というように矢印が見えますが、これは”左のコマンドが入力されたら、右のコマンドを実行するよー”みたいなやつです。(これをエイリアスといいます)
諸悪の根源(こと今回の主題に限っては)はこの部分。
ここで指定されているのがpython2になっています。
このバージョンをPython3に変えましょう。
カレントディレクトリの確認
まずは安全のために、カレントディレクトリをしっかり確認。
rmコマンドは環境を安易に破壊できてしまいますので、今どこで使おうとしているのかは確認しましょう。
(今の環境でも十分怖いですが、、、、)
あまりピンときていない方は、「rm 危険」とかで調べてみてください。
pwd
/usr/local/bin #これになっていることをしっかり確認!!!
エイリアスの削除
rm python
ls -l | grep python # pythonエイリアスがなくなっていることを確認
エイリアスの再作成
ln -s ../Cellar/python@3.12/3.12.5/bin/python3.12 /usr/local/bin/python
ls -l | grep python # pythonのエイリアスが更新されていることを確認
確認
次のコマンドで、正しい出力が出ればOKです。
python -V
Python 3.12.5
これで、pythonコマンドでpython3が利用できるようになりました。
自分の環境では、homebrewのパッケージインストール先が下記になっていました。
/usr/local/Cellar
なので、これが別の場所だった方は適宜読み替えてください。
homebrewでインストールしたバージョンがpython3.12なら、
where python3.12
ののち、
出てきたエイリアスの指定先を調べてみましょう。
pipのエイリアス更新
同様に、pipのエイリアスを変更します。
pipはHomebrewと似ていますが、ライブラリ管理アプリケーションになります。
違う点は、"pythonで使用するライブラリはpip"というところ。
下記のイメージのように、「担当範囲が違う」という感覚でいいかなと思います。
これも初期設定ではpip=python2のpip
になっていますので、変えていきましょう。
ディレクトリ/usr/local/bin
に移動してください。(さっきpythonのエイリアスを編集したのと同じディレクトリです。続きで作業なら移動不要)
cd /usr/local/bin
pwd #/usr/local/binと出ればOK
pipエイリアスの確認
ls -l | grep pip
lrwxrwxr-x 1 root wheel 65 6 24 2022 pip -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip
同様に、python2のものになっています。
エイリアスの削除
rm pip
ls -l | grep pip # pipエイリアスがなくなっていることを確認
エイリアスの再作成
ln -s ../Cellar/python@3.12/3.12.5/bin/pip3.12 /usr/local/bin/pip
ls -l | grep pip # pipのエイリアスが更新されていることを確認
確認
次のコマンドで、正しい出力が出ればOKです。
pip -V
pip 24.2 from /usr/local/lib/python3.12/site-packages/pip (python 3.12)
オマケ)パッケージ管理って何?必要?って方へ
自分が最初そうだったので、、、
アプリケーションだったりをWeb検索して、HPからインストーラーをダウンロード→exeだったりdmgをぽちぽちしてインストールしていた人にとって、コマンドラインで色々操作するのには抵抗があります。
ただし、パッケージ管理の便利なところは
- 一括でアップデートできる
- 複数のバージョンを切り替えられる。
- アプリケーションを入れているかどうかが一発でわかる。
など、いろいろなメリットがあります。
いまは”これでアプリの管理をするとめちゃくちゃ便利!!”というイメージでいればOKです。