【Mac】Pythonのインストール+pyenvの使い方について

スポンサーリンク

先日、AWS CLI 1.6.8にアップグレードしたらエラーで使えなくなったという記事を書きましたが、確認したい事があったので、システムデフォルトのPythonを使うのをやめて pyenv でローカル環境にインストールして使うことにしました。

pyenvとは

Pythonのバージョン管理ツールです。複数のバージョンをインストールしてプロジェクト毎に使い分けたりする事のできる、Rubyでいう rbenv と同じようなものです。 https://github.com/yyuu/pyenv

pyenvのインストール

Homebrewを使ってインストールします。Homebrewのインストールはコチラ

$ brew install pyenv
==> Downloading https://github.com/yyuu/pyenv/archive/v20141211.tar.gz
######################################################################## 100.0%
==> Caveats
To enable shims and autocompletion add to your profile:
  if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

To use Homebrew's directories rather than ~/.pyenv add to your profile:
  export PYENV_ROOT=/usr/local/opt/pyenv
==> Summary
?  /usr/local/Cellar/pyenv/20141211: 315 files, 2.7M, built in 4 seconds

$ pyenv --version
pyenv 20141211

上記にも表示されている通り、if〜eval "$(pyenv init -)"; fi〜.bash_profileに追加します。これを追加しておくことでターミナルの起動時に~/.pyenv/shimsのパスを通してくれたり補完機能を有効にしてくれたりします。

$ echo 'if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi' >> ~/.bash_profile

export PYENV_ROOT〜の部分については、何も指定しなければROOT ディレクトリは~/.pyenvを指すようになってますので、別のディレクトリにしたい場合はこちらも~/.bash_profileに追加して下さい。

Pythonをインストールする

バージョンを確認する

まずインストール可能なバージョンを確認します。pyenv install -lを使うか、補完機能があるためpyenv installまで入力してからSpaceキーを2回叩くと一覧で表示されます。-l オプションの場合は1行づつ表示されるので補完機能を使った方が見易くてオススメです。

$ pyenv install
Display all 153 possibilities? (y or n)
2.1.3                2.7-dev              3.2.6                anaconda-1.9.1       miniconda-3.0.4      pypy-2.0-dev         pypy-dev
2.2.3                2.7.1                3.3-dev              anaconda-1.9.2       miniconda-3.0.5      pypy-2.0-src         pypy3-2.3.1
2.3.7                2.7.2                3.3.0                anaconda-2.0.0       miniconda-3.3.0      pypy-2.0.1           pypy3-2.3.1-src
2.4                  2.7.3                3.3.1                anaconda-2.0.1       miniconda-3.4.2      pypy-2.0.1-src       pypy3-2.4.0
2.4.1                2.7.4                3.3.2               
...

インストールする

バージョンを選択してインストールします。とりあえず2.x系と3.x系の両方を入れておきます。$PYENV_ROOTを指定していないので$HOME/.pyenv/versions/以下にバージョン毎にインストールされます。

$ pyenv install 2.7.9
Downloading Python-2.7.9.tgz...
-> https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
Installing Python-2.7.9...
Installing setuptools from https://bootstrap.pypa.io/ez_setup.py...
Installing pip from https://bootstrap.pypa.io/get-pip.py...
Installed Python-2.7.9 to /Users/tasukujp/.pyenv/versions/2.7.9

$ pyenv install 3.4.2
Downloading Python-3.4.2.tgz...
-> https://yyuu.github.io/pythons/44a3c1ef1c7ca3e4fd25242af80ed72da941203cb4ed1a8c1b724d9078965dd8
Installing Python-3.4.2...
Installed Python-3.4.2 to /Users/tasukujp/.pyenv/versions/3.4.2

バージョンを変更する

インストールしただけではバージョンは変わりません。システムデフォルトのままです。

$ python --version
Python 2.7.6

インストール済みのバージョンを確認します。

$ pyenv versions
* system (set by /Users/tasukujp/.pyenv/version)
  2.7.9
  3.4.2

バージョンを変更するにはglobalコマンドを使います。

$ pyenv global 2.7.9
$ pyenv rehash
$ pyenv version
2.7.9 (set by /Users/tasukujp/.pyenv/version)
$ python --version
Python 2.7.9

特定ディレクトリ以下のバージョンを変えたい場合はlocalコマンドを使います。これを実行したディレクトリ以下に対象のバージョンが適用されます。

$ pyenv local 3.4.2

インストールエラー

以下のようにインストールが失敗する場合があります。

$ pyenv install 2.7.10                                                                                                                                                                         ⮂
Downloading Python-2.7.10.tgz...
-> https://yyuu.github.io/pythons/eda8ce6eec03e74991abb5384170e7c65fcd7522e409b8e83d7e6372add0f12a
Installing Python-2.7.10...
patching file ./Lib/site.py
ERROR: The Python zlib extension was not compiled. Missing the zlib?

Please consult to the Wiki page to fix the problem.
https://github.com/yyuu/pyenv/wiki/Common-build-problems


BUILD FAILED (OS X 10.10.5 using python-build 20150519)
...

その場合はxcode-select --installコマンドで command line developer tools をインストールしてください。

$ xcode-select --install                                                                                                                                                                       ⮂
xcode-select: note: install requested for command line developer tools

pipを使ってAWS CLIをインストール

今回のメインです。Pythonを使う目的は、現状 AWS CLI しかないのでインストールします。pip は pyenv を使って Python をインストールした場合は一緒に入ってきてましたのでそのまま使います。

$ pip install awscli
Downloading/unpacking awscli
  Downloading awscli-1.6.9.tar.gz (280kB): 280kB downloaded
  Running setup.py (path:/private/var/folders/7b/zfmhk6ld50s5g5bb6kp5_cqr0000gn/T/pip_build_tasukujp/awscli/setup.py) egg_info for package awscli
...
Successfully installed awscli botocore bcdoc colorama docutils rsa jmespath python-dateutil six pyasn1
Cleaning up...

インストールされたか確認したらコマンドが無いと言われました。

$ aws --version
-bash: aws: command not found

パッケージを新しくインストールしたらpyenv rehashコマンドを使わないといけません。

$ pyenv rehash
$ aws --version
aws-cli/1.6.9 Python/2.7.9 Darwin/14.0.0

さて、前回不整合が起きてた six パッケージのバージョンを確認します。

$ pip show six
---
Name: six
Version: 1.8.0
Location: /Users/tasukujp/.pyenv/versions/2.7.9/lib/python2.7/site-packages
Requires:

$ python
Python 2.7.9 (default, Dec 14 2014, 17:40:35)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import six
>>> print six.__version__
1.8.0
>>> print six.__file__
/Users/tasukujp/.pyenv/versions/2.7.9/lib/python2.7/site-packages/six.pyc
>>> exit()

ちゃんと両方とも 1.8.0 を参照してますね。これで気になってた事が確認できました。