先日、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 を参照してますね。これで気になってた事が確認できました。