MacでXcodeと一緒にpython3をインストールする


はじめに

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: [email protected]
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
1) 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マシンがメインですし)、しばらくこれでやってみようと思っています。