はじめに
macOSにはpython2.7が標準でバンドルされていますが、python3系は入っていません。python2系は既にサポートが終了していますので、python3系に切り替えている方が多いのではないかと思います。私もディープラーニングのコードを動かす時(勉強用に人様が作ったコードを動かしてみるのがメインですが・・)にpythonを使いますが、最近はいつもpython3を使っています。
macOSにpython3がついてこないので、これまでは;
- anaconda → 最近は使っていない
- pyenv → 最近はこっち
を使ってpython3をインストールしていました。今回iMacを2020(最後のIntel版)に更新して環境構築を行なっていた際に、Xcode Command Line Toolsをインストールするとpython3が同時にインストールされることに気がつきました。この情報、ネットを調べてもあまり見かけませんが、Xcodeをインストールする方はついでにpython3も手に入れることができるため、案外お手軽な方法かもしれないと思いこの記事でご紹介します。
ただし、Xcodeのバージョンによってついてくるpython3のバージョンが決まっているたため、pythonのバージョンを決め打ちにしたい方には向いてないですが・・
検証環境
- macOS Catalina 10.15.6 → 現在はBigSur 11.2.3にアップデートしています
- Xcode 11.6 → 現在は12.4にアップデート
- OS標準のpython2.7以外は入っていない状態からスタート
手順
pythonのバージョンを確認
$ python --version
Python 2.7.16
$ python3 --version
xcrun: error: active developer path ("/Library/Developer/CommandLineTools") does not exist
Use `sudo xcode-select --switch path/to/Xcode.app` to specify the Xcode that you wish to use for command line developer tools, or use `xcode-select --install` to install the standalone command line developer tools.
See `man xcode-select` for more details.
Xcode command line toolsのインストール(xcode-select --install)でpython3が使えると言っているではありませんか! 早速インストール。
Command Line Toolsのインストール
$ xcode-select --install
xcode-select: note: install requested for command line developer tools
Xcode本体(6GBくらいありでかい)をインストールしていなくてもcommand line tools単体でインストールすることもできます。この時点ではCatalinaに対応したXcode 11.6のcommand line toolsがインストールされますが、インストール中にアップデートがあるよと通知が出ていました。とりあえず最後までインストールします。
インストール後の確認
$ python3 --version
Python 3.7.3
$ pip3 --version
pip 19.0.3 from /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages/pip (python 3.7)
pip3 list
Package Version
---------- -------
pip 19.0.3
setuptools 40.8.0
six 1.12.0
wheel 0.33.1
python 3.7.3とpipがインストールされてました!
デフォルトで入っているモジュールは/Libray配下のシステム領域にインストールされています。
$ pip3 show six
Name: six
Version: 1.12.0
Summary: Python 2 and 3 compatibility utilities
Home-page: https://github.com/benjaminp/six
Author: Benjamin Peterson
Author-email: benjamin@python.org
License: MIT
Location: /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages
Requires:
Required-by:
試しにnumpyをインストールしてみます。--userオプションをつけてユーザディレクトリ配下にインストールするようにします。
~$ pip3 install --user numpy
Collecting numpy
Using cached https://files.pythonhosted.org/packages/ad/0b/c8b1383f0c43eabf925172ce850bf2224ede9fc351e8acf0ddd66ff567ff/numpy-1.19.1-cp37-cp37m-macosx_10_9_x86_64.whl
Installing collected packages: numpy
The scripts f2py, f2py3 and f2py3.7 are installed in '/Users/kenshi/Library/Python/3.7/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed numpy-1.19.1
$ pip3 list
Package Version
---------- -------
numpy 1.19.1
pip 19.0.3
setuptools 40.8.0
six 1.12.0
wheel 0.33.1
PATHが通っていないという警告が出ていますがnumpyのインストールができました。
インストールされたパスは以下の通りでユーザのLibrabyフォルダ配下でした(~/.xxxの隠しフォルダに入れられるより、こっちの方が好きです)。
$ pip3 show numpy
Name: numpy
Version: 1.19.1
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email: None
License: BSD
Location: /Users/kenshi/Library/Python/3.7/lib/python/site-packages
Requires:
Required-by
Command Line Toolsをアップデートすると
このアップデートでCommand Line Tools for Xcode 12 beta 5がインストールされるようです。(Xcode本体は更新されませんでした)
アップデート完了後にpythonのバージョンを確認すると3.8.2になっていました・・
pipでインストールしたモジュールは、python3.8のパッケージとして引き継がれています。
$ python3 --version
Python 3.8.2
$ pip3 --version
pip 19.2.3 from /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/site-packages/pip (python 3.8)
$ pip3 list
Package Version
---------- -------
numpy 1.19.1
pip 19.2.3
setuptools 41.2.0
six 1.15.0
wheel 0.33.1
$ pip3 show numpy
Name: numpy
Version: 1.19.1
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email: None
License: BSD
Location: /Users/kenshi/Library/Python/3.8/lib/python/site-packages
Requires:
Required-by:
その他
ここまではpipは動かない(pip3で起動する必要がある)のですが、pip3をアップデートするとpipコマンドでも動くようになりました。
$ pip --version
zsh: command not found: pip
$ sudo pip3 install -U pip
$ pip3 --version
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
pip 20.2.2 from /Library/Python/3.8/site-packages/pip (python 3.8)
$ pip --version
pip 20.2.2 from /Library/Python/3.8/site-packages/pip (python 3.8)
$ pip list
Package Version
---------- -------
numpy 1.19.1
pip 20.2.2
setuptools 41.2.0
six 1.15.0
wheel 0.33.1
pip3 --versionの実行時にワーニングが出ていますが、一旦ターミナルを終了して再度動かしすとこのワーニングは出なくなりました。
その後
現在はmacOS BigSur(11.2.3)のpython 3.8.2で動いていいます。
ただ、macOSのバージョンアップが入ると、マイナーバージョンアップでもpipが動かなくなったりすることがあり正直微妙な感じです。
pipが動かなくなった際の対処Tips
- No module named 'pip._internal.cli.main' が発生する
・python3が動く場合、pyhton3 -m pipで起動してみる。
・起動できる場合、sudo python3 -m pip install -U pip で復活する
おわりに
ということで、Xcodeのアップデートで勝手にpython3.8に更新されるところは微妙な結果ですが、python3のインストールはこれまでより簡単にできました。
私がMacで使っている範囲ではpython3.8だと動かないソフトはないため(あとpythonを動かすのはLinuxマシンがメインですし)、しばらくこれでやってみようと思っています。