AWS Cloud9でのpython2からpyhton3に変更する方法(pyenv利用)


概要

aws cloud9でslackbot用のラムダ関数を作成しようとした時に,python2からpython3への変更に手間取ったので,忘れないように書いておきます.結局,cloud9では,「Preference」=> 「Python Support」から2から3への変更が可能だったので,次回からはそうするようにします.
間違えてしまった理由として,前回,EC2サーバを自分で建てたとき,python2しか入っていなかったので,cloud9でサーバを立てた場合でも,python3は入っていないと思ってしまったためです.ですので,python3を入れるのがめんどくさいなら,cloud9を立ててec2を利用するのもいいかもしれません.

今回は,python2からpyenvからとってきたpython3.6.2に変えます.

利用環境

amazon linux2

バージョン確認

pythonとpipのバージョンを確認しましょう.

$ python -V
Python 2.7.14
$ pip -V
pip 9.0.3 from /usr/lib/python2.7/dist-packages (python 2.7)

pyenvのインストール

pyenvをgitから落としてきて.bash_profileにpyenvのpathを書き込む
その後sourceコマンドで.bash_profileを改めて読み込み(もしくは再起動)

$git clone https://github.com/yyuu/pyenv.git ~/.pyenv

$echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

$source ~/.bash_profile

pyenv へのpathが通っているか確認

$pyenv --version
pyenv 1.2.13-19-gf3d008fd

pyenvでインストール可能なバージョンを指定

pyenv install --list
  2.1.3
  2.2.3
  2.3.7
  2.4.0
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  2.5.0
  2.5.1
  2.5.2
  2.5.3

いろいろ出ますが,今回は3.6.2を選択する.以下に保存される.

$pyenv install 3.6.2

$find . -name python3.6 
/home/ec2-user/.pyenv/shims/python3.6 2>/dev/null
/home/ec2-user/.pyenv/versions/3.6.2/lib/python3.6
/home/ec2-user/.pyenv/versions/3.6.2/bin/python3.6 

systemになっているので,3.6.2に変更

$pyenv versions
* system
  3.6.2 (set by /home/ec2-user/.pyenv/version)
$pyenv global 3.6.6
$pyenv rehash

これで

$pyenv versions
  system
* 3.6.2 (set by /home/ec2-user/.pyenv/version)

3.6.2のほうにチェックが入りました.
ただ,これでもpython2のままです.

$python  --V
python2.7.?

これは,.bash_rcで利用するpythonがすでに決められているためだ.
そこで,

$sudo vim ~/.bashrc

alias python='python27'

上の部分を削除します.
さらに,

$find / -name python3.6  2>/dev/null
/usr/lib/python3.6
/usr/bin/python3.6
/usr/local/lib/python3.6
/usr/local/lib64/python3.6
/usr/lib64/python3.6
/opt/c9/python3/lib/python3.6
/opt/c9/python3/bin/python3.6
/home/ec2-user/.pyenv/shims/python3.6
/home/ec2-user/.pyenv/versions/3.6.2/lib/python3.6
/home/ec2-user/.pyenv/versions/3.6.2/bin/python3.6
/home/ec2-user/environment/.c9/metadata/environment/calif/venv/lib/python3.6
~/.pyenv/shims/python3.6

とpythonのフォルダは2つ(はじめからあるもの(/usr/bin)と今入れたもの(home/ecs-user/.pyenv)ので,pythonを指定したときに,先に呼び出すファルダを決めます.
今は,

$which python
/usr/bin/python3.6

とかがでます.

そこで,

$ sudo vim /etc/paths

/home/ec2-user/.pyenv/shims
/usr/bin
/bin
/usr/local/bin
/usr/sbin
/sbin
/usr/local/sbin

として,pyenvのpythonを先に読み込むようにしましょう.
すると,

$which python
/home/ec2-user/.pyenv/shims/python3.6

となります.
ならないようなら,一度,サーバを落としてください.
これで,pyenvを使ってpython3.6.2を利用できるようになりました.
環境によって,バージョンは変えてください.
ちなみに,現状では,あらかじめ入っているpython3
3.6.8です.
ちなみに,

$pip -version
pip 19.3.1 from /home/ec2-user/.pyenv/versions/3.6.2/lib/python3.6/site-packages/pip (python 3.6)

となっており,pipはpython3を利用されるようになっている.
python2も共存しているので,pipコマンドを利用しているのか確認するとよい.