EC2上でvirtualenvを使ってpython3.4 with Boto3の独立した環境を作成する

2016.08.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

小ネタです。

Amazon EC2上でPythonを使う際、状況に拠ってはPython3系を用意したいという場合があるかと思いますが、現行新規に作成したEC2(Amazon Linux AMI)の場合は環境がPython3系ではありません。

この環境に手を加えてPython3系の環境を準備する手段は幾つかあるかと思いますが、AWSプレミアムサポートのナレッジベースのページに、virtualenvを使った非常にシンプルな環境準備の方法が展開されていましたのでサクッとご紹介してみたいと思います。

まずはじめにEC2環境を用意します。起動時点でのAmazon Linux AMIを選択し、インスタンスを起動。

create-env-python34-with-boto3_01

サーバにログインし各種更新作業を行います。

$ ssh -i xxxxxxxxxx.pem ec2-user@xxx.xxx.xxx.xxx
$ sudo yum -y update

現行Pythonのコマンドフルパスとバージョンを確認してみます。この時点ではPython2.7が導入済の状態となっています。

$ which python
/usr/bin/python
$ python
Python 2.7.10 (default, Jul 20 2016, 20:53:27) 
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

botoのimportは問題無く行えている状況です。

>>> import boto
>>> exit()

次いで、Python3.4をyumでインストール。

$ sudo yum -y install python34
$ which python34
/usr/bin/python34

これらの環境が揃ったところで、virtualenvを使って切り替える設定を施して行きます。venvフォルダを作成&移動し、

$ pwd
/home/ec2-user
$ mkdir venv
$ cd venv/
$ pwd
/home/ec2-user/venv
$

virtualenvコマンドを使って環境設定を実施。

$ virtualenv -p /usr/bin/python3.4 python34
Running virtualenv with interpreter /usr/bin/python3.4
Using base prefix '/usr'
New python executable in pytho34/bin/python3.4
Also creating executable in pytho34/bin/python
Installing setuptools, pip...done.
$

sourceコマンドを使って設定を有効化します。

$ source /home/ec2-user/venv/python34/bin/activate

改めてPythonのコマンドフルパスを確認。Python3.4の連携が為されました。

$ which python
~/venv/pytho34/bin/python

boto3をインストールし、pythonインタプリタ上でboto3をimportしてみます。こちらも問題無く実行出来ました。

$ pip install boto3
You are using pip version 6.0.8, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting boto3
  Downloading boto3-1.4.0-py2.py3-none-any.whl (117kB)
    100% |################################| 118kB 2.8MB/s 
Collecting botocore<1.5.0,>=1.4.1 (from boto3)
  Downloading botocore-1.4.48-py2.py3-none-any.whl (2.6MB)
    100% |################################| 2.6MB 211kB/s 
Collecting s3transfer<0.2.0,>=0.1.0 (from boto3)
  Downloading s3transfer-0.1.2-py2.py3-none-any.whl (49kB)
    100% |################################| 49kB 6.8MB/s 
Collecting jmespath<1.0.0,>=0.7.1 (from boto3)
  Downloading jmespath-0.9.0-py2.py3-none-any.whl
Collecting python-dateutil<3.0.0,>=2.1 (from botocore<1.5.0,>=1.4.1->boto3)
  Downloading python_dateutil-2.5.3-py2.py3-none-any.whl (201kB)
    100% |################################| 204kB 1.4MB/s 
Collecting docutils>=0.10 (from botocore<1.5.0,>=1.4.1->boto3)
  Downloading docutils-0.12-py3-none-any.whl (508kB)
    100% |################################| 512kB 1.0MB/s 
Collecting six>=1.5 (from python-dateutil<3.0.0,>=2.1->botocore<1.5.0,>=1.4.1->boto3)
  Downloading six-1.10.0-py2.py3-none-any.whl
Installing collected packages: six, docutils, python-dateutil, jmespath, s3transfer, botocore, boto3
:
Successfully installed boto3-1.4.0 botocore-1.4.48 docutils-0.12 jmespath-0.9.0 python-dateutil-2.5.3 s3transfer-0.1.2 six-1.10.0
(pytho34)$ 
$
$ python
Python 3.4.3 (default, Jul 20 2016, 21:31:36) 
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
>>> exit()

Python3.4連携設定の無効化についてはdeactivateコマンドを使います。

$ deactivate
$ which python
  /usr/bin/python

もしサーバログイン時にこの設定を有効化させたい場合は以下の様な処理を実行しておくと良さげです。

$ echo "source /home/ec2-user/venv/python34/bin/activate" >> /home/ec2-user/.bashrc

まとめ

非常に簡単且つシンプルなものではありましたが、意外と利用ケースはありそうだなと思って改めて書き起こしてみました。皆様もPython3系環境を手っ取り早く用意したい!という場合、この手法を使って設定してみてはいかがでしょうか?こちらからは以上です。